loghelper: improve header logging

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
This commit is contained in:
Eric Callahan 2023-05-25 16:30:02 -04:00
parent cd4fdfb7b6
commit adca664460
No known key found for this signature in database
GPG Key ID: 5A1EB336DFB4C71B
1 changed files with 20 additions and 12 deletions

View File

@ -7,6 +7,7 @@
from __future__ import annotations
import logging
import logging.handlers
import time
import os
import sys
import asyncio
@ -43,22 +44,26 @@ class LocalQueueHandler(logging.handlers.QueueHandler):
class MoonrakerLoggingHandler(logging.handlers.TimedRotatingFileHandler):
def __init__(self, app_args: Dict[str, Any], **kwargs) -> None:
super().__init__(app_args['log_file'], **kwargs)
self.rollover_info: Dict[str, str] = {
'header': f"{'-'*20}Moonraker Log Start{'-'*20}"
}
self.rollover_info['application_args'] = "\n".join(
[f"{k}: {v}" for k, v in app_args.items()])
lines = [line for line in self.rollover_info.values() if line]
if self.stream is not None:
self.stream.write("\n".join(lines) + "\n")
self.app_args = app_args
self.rollover_info: Dict[str, str] = {}
def set_rollover_info(self, name: str, item: str) -> None:
self.rollover_info[name] = item
def doRollover(self) -> None:
super().doRollover()
lines = [line for line in self.rollover_info.values() if line]
if self.stream is not None:
self.write_header()
def write_header(self) -> None:
if self.stream is None:
return
strtime = time.asctime(time.gmtime())
header = f"{'-'*20} Log Start | {strtime} {'-'*20}\n"
self.stream.write(header)
app_section = "\n".join([f"{k}: {v}" for k, v in self.app_args.items()])
self.stream.write(app_section + "\n")
if self.rollover_info:
lines = [line for line in self.rollover_info.values() if line]
self.stream.write("\n".join(lines) + "\n")
class LogManager:
@ -66,6 +71,8 @@ class LogManager:
self, app_args: Dict[str, Any], startup_warnings: List[str]
) -> None:
root_logger = logging.getLogger()
while root_logger.hasHandlers():
root_logger.removeHandler(root_logger.handlers[0])
queue: Queue = Queue()
queue_handler = LocalQueueHandler(queue)
root_logger.addHandler(queue_handler)
@ -74,8 +81,8 @@ class LogManager:
stdout_fmt = logging.Formatter(
'[%(filename)s:%(funcName)s()] - %(message)s')
stdout_hdlr.setFormatter(stdout_fmt)
for name, val in app_args.items():
logging.info(f"{name}: {val}")
app_args_str = "\n".join([f"{k}: {v}" for k, v in app_args.items()])
sys.stdout.write(f"\nApplication Info:\n{app_args_str}")
self.file_hdlr: Optional[MoonrakerLoggingHandler] = None
self.listener: Optional[logging.handlers.QueueListener] = None
log_file: str = app_args.get('log_file', "")
@ -88,6 +95,7 @@ class LogManager:
self.file_hdlr.setFormatter(formatter)
self.listener = logging.handlers.QueueListener(
queue, self.file_hdlr, stdout_hdlr)
self.file_hdlr.write_header()
except Exception:
log_file = os.path.normpath(log_file)
dir_name = os.path.dirname(log_file)