diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2017-05-01 13:44:06 -0400 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2017-05-01 14:48:44 -0400 |
commit | 31ca2331d296cfaae1e853e91f5dbc2c42d96ce9 (patch) | |
tree | d555eb3083e0e72f392485cd08bea02dbb7bd8fb /klippy/queuelogger.py | |
parent | b5062a07d146e6f1d04e44c91fd924d1f8394064 (diff) | |
download | kutter-31ca2331d296cfaae1e853e91f5dbc2c42d96ce9.tar.gz kutter-31ca2331d296cfaae1e853e91f5dbc2c42d96ce9.tar.xz kutter-31ca2331d296cfaae1e853e91f5dbc2c42d96ce9.zip |
queuelogger: Add critical information to each logfile on rollover
When the log file does a rollover, start the top of the log with
critical system information (eg, software versions).
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy/queuelogger.py')
-rw-r--r-- | klippy/queuelogger.py | 42 |
1 files changed, 27 insertions, 15 deletions
diff --git a/klippy/queuelogger.py b/klippy/queuelogger.py index 38a3d423..32cb125d 100644 --- a/klippy/queuelogger.py +++ b/klippy/queuelogger.py @@ -3,7 +3,7 @@ # Copyright (C) 2016,2017 Kevin O'Connor <kevin@koconnor.net> # # This file may be distributed under the terms of the GNU GPLv3 license. -import logging, logging.handlers, threading, Queue +import logging, logging.handlers, threading, Queue, time # Class to forward all messages through a queue to a background thread class QueueHandler(logging.Handler): @@ -21,27 +21,39 @@ class QueueHandler(logging.Handler): self.handleError(record) # Class to poll a queue in a background thread and log each message -class QueueListener(object): - def __init__(self, handler): - self.handler = handler - self.queue = Queue.Queue() - self.thread = threading.Thread(target=self._bg_thread) - self.thread.start() +class QueueListener(logging.handlers.TimedRotatingFileHandler): + def __init__(self, filename): + logging.handlers.TimedRotatingFileHandler.__init__( + self, filename, when='midnight', backupCount=5) + self.bg_queue = Queue.Queue() + self.bg_thread = threading.Thread(target=self._bg_thread) + self.bg_thread.start() + self.rollover_info = {} def _bg_thread(self): while 1: - record = self.queue.get(True) + record = self.bg_queue.get(True) if record is None: break - self.handler.handle(record) + self.handle(record) def stop(self): - self.queue.put_nowait(None) - self.thread.join() + self.bg_queue.put_nowait(None) + self.bg_thread.join() + def set_rollover_info(self, name, info): + self.rollover_info[name] = info + def doRollover(self): + logging.handlers.TimedRotatingFileHandler.doRollover(self) + lines = [self.rollover_info[name] + for name in sorted(self.rollover_info) + if self.rollover_info[name]] + lines.append( + "=============== Log rollover at %s ===============" % ( + time.asctime(),)) + self.emit(logging.makeLogRecord( + {'msg': "\n".join(lines), 'level': logging.INFO})) def setup_bg_logging(filename, debuglevel): - handler = logging.handlers.TimedRotatingFileHandler( - filename, when='midnight', backupCount=5) - ql = QueueListener(handler) - qh = QueueHandler(ql.queue) + ql = QueueListener(filename) + qh = QueueHandler(ql.bg_queue) root = logging.getLogger() root.addHandler(qh) root.setLevel(debuglevel) |