From bd2f95d54baac6bac1f8c89ef472d31f50920226 Mon Sep 17 00:00:00 2001 From: Vincent BENOIT Date: Tue, 22 Nov 2022 16:45:19 +0100 Subject: [PATCH] gestion de la rotation des logs directement dans le code source --- kineintercom/intercom.py | 44 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 40 insertions(+), 4 deletions(-) diff --git a/kineintercom/intercom.py b/kineintercom/intercom.py index 382e051..867a227 100644 --- a/kineintercom/intercom.py +++ b/kineintercom/intercom.py @@ -21,10 +21,45 @@ import socket import shutil from threading import Thread from apscheduler.schedulers.background import BackgroundScheduler +import logging.handlers as handlers ################################################################### # Class et Methods # +class SizedTimedRotatingFileHandler(handlers.TimedRotatingFileHandler): + """ + Handler for logging to a set of files, which switches from one file + to the next when the current file reaches a certain size, or at certain + timed intervals + """ + + def __init__(self, filename, maxBytes=0, backupCount=0, encoding=None, + delay=0, when='h', interval=1, utc=False): + handlers.TimedRotatingFileHandler.__init__(self, filename, when, interval, + backupCount, encoding, delay, utc) + self.maxBytes = maxBytes + + def shouldRollover(self, record): + """ + Determine if rollover should occur. + + Basically, see if the supplied record would cause the file to exceed + the size limit we have. + """ + if self.stream is None: # delay was set... + self.stream = self._open() + if self.maxBytes > 0: # are we rolling over? + msg = "%s\n" % self.format(record) + # due to non-posix-compliant Windows feature + self.stream.seek(0, 2) + if self.stream.tell() + len(msg) >= self.maxBytes: + return 1 + t = int(time.time()) + if t >= self.rolloverAt: + return 1 + return 0 + + def validate_json(json_data={}, logger=None): ''' Validate json database by schema @@ -715,14 +750,15 @@ def main(): logger = log.getLogger("Intercom") logger.setLevel(log.DEBUG) fl = log.StreamHandler() - hl = log.FileHandler(os.path.join('/var/log/kineintercom','Intercom.log')) fl.setLevel(log.DEBUG) - hl.setLevel(log.INFO) formatter = log.Formatter('%(asctime)s - %(funcName)s - %(levelname)s - %(message)s') fl.setFormatter(formatter) - hl.setFormatter(formatter) logger.addHandler(fl) - logger.addHandler(hl) + handler = SizedTimedRotatingFileHandler(os.path.join('/var/log/kineintercom','Intercom.log'), + maxBytes=10000000, backupCount=30, when='d', interval=1) + handler.setLevel(log.INFO) + handler.setFormatter(formatter) + logger.addHandler(handler) global GSM_MODULE_STATE global GSM_MODULE_INIT_STATE