[logging] Add log rotating to ControlledLogger

pull/2/head
Daniel Van Der Maden 5 years ago
parent b27315b0f7
commit 1b692a56b4
  1. 0
      Makefile
  2. 0
      README.md
  3. 21
      pyhmy/logging.py

@ -1,7 +1,20 @@
import os
import threading import threading
import datetime import datetime
import gzip
import os
import logging import logging
import logging.handlers
class _GZipRotator:
def __call__(self, source, dest):
os.rename(source, dest)
f_in = open(dest, 'rb')
f_out = gzip.open("%s.gz" % dest, 'wb')
f_out.writelines(f_in)
f_out.close()
f_in.close()
os.remove(dest)
class ControlledLogger: class ControlledLogger:
@ -9,7 +22,7 @@ class ControlledLogger:
A simple logger that only writes to file when the 'write' method is called. A simple logger that only writes to file when the 'write' method is called.
""" """
def __init__(self, logger_name, log_dir): def __init__(self, logger_name, log_dir, backup_count=5):
""" """
:param logger_name: The name of the logger and logfile :param logger_name: The name of the logger and logfile
:param log_dir: The directory in which to save this log file (can be abs or relative). :param log_dir: The directory in which to save this log file (can be abs or relative).
@ -18,8 +31,10 @@ class ControlledLogger:
log_dir = log_dir[:-1] log_dir = log_dir[:-1]
log_dir = os.path.realpath(log_dir) log_dir = os.path.realpath(log_dir)
os.makedirs(log_dir, exist_ok=True) os.makedirs(log_dir, exist_ok=True)
handler = logging.FileHandler(f"{log_dir}/{logger_name}.log") handler = logging.handlers.TimedRotatingFileHandler(f"{log_dir}/{logger_name}.log", 'midnight', 1,
backupCount=backup_count)
handler.setFormatter(logging.Formatter('%(levelname)s - %(message)s')) handler.setFormatter(logging.Formatter('%(levelname)s - %(message)s'))
handler.rotator = _GZipRotator()
self.filename = handler.baseFilename self.filename = handler.baseFilename
self.logger = logging.getLogger(logger_name) self.logger = logging.getLogger(logger_name)

Loading…
Cancel
Save