From f3c219f2a067d513e60bd27588db7be639aa4caf Mon Sep 17 00:00:00 2001 From: Nick Mowen Date: Sun, 2 Oct 2022 12:45:29 -0600 Subject: [PATCH] Add colors to frigate format to make logs easier to parse --- frigate/log.py | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/frigate/log.py b/frigate/log.py index e28eee6f0..0734242af 100644 --- a/frigate/log.py +++ b/frigate/log.py @@ -14,9 +14,7 @@ from collections import deque def listener_configurer() -> None: root = logging.getLogger() console_handler = logging.StreamHandler() - formatter = logging.Formatter( - "[%(asctime)s] %(name)-30s %(levelname)-8s: %(message)s", "%Y-%m-%d %H:%M:%S" - ) + formatter = FrigateLogFormatter() console_handler.setFormatter(formatter) root.addHandler(console_handler) root.setLevel(logging.INFO) @@ -42,6 +40,33 @@ def log_process(log_queue: Queue) -> None: logger.handle(record) +class FrigateLogFormatter(logging.Formatter): + + grey = "\x1b[38;20m" + yellow = "\x1b[33;20m" + red = "\x1b[31;20m" + bold_red = "\x1b[31;1m" + reset = "\x1b[0m" + format = ( + "[%(asctime)s] %(name)-30s %(levelname)-8s: %(message)s", + "%Y-%m-%d %H:%M:%S", + ) + + def __iniit__(self) -> None: + self.FORMATS = { + logging.DEBUG: self.grey + format + self.reset, + logging.INFO: self.grey + format + self.reset, + logging.WARNING: self.yellow + format + self.reset, + logging.ERROR: self.red + format + self.reset, + logging.CRITICAL: self.bold_red + format + self.reset, + } + + def format(self, record): + log_fmt = self.FORMATS.get(record.levelno) + formatter = logging.Formatter(log_fmt) + return formatter.format(record) + + # based on https://codereview.stackexchange.com/a/17959 class LogPipe(threading.Thread): def __init__(self, log_name: str):