gestion de la rotation des logs directement dans le code source

This commit is contained in:
Vincent BENOIT
2022-11-22 16:45:19 +01:00
parent 1b5742a311
commit bd2f95d54b
+40 -4
View File
@@ -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