From 2da4bb38dd873201996937f55055be4fd032417e Mon Sep 17 00:00:00 2001 From: Kiryl Date: Tue, 5 Oct 2021 17:19:09 +0300 Subject: [PATCH] improve loggers --- consumer.py | 6 +++--- src/util/helpers.py | 26 +++++++++++++++++++++++--- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/consumer.py b/consumer.py index 006aaae..bab00ac 100644 --- a/consumer.py +++ b/consumer.py @@ -9,12 +9,12 @@ from functools import partial from threading import Thread, active_count from src.access import Access +from src.util.helpers import ColoredFormatter from src.docx_converter.docx_solver import DocxBook from src.epub_converter.epub_solver import EpubBook def configure_file_logger(name, filename='logs/converter_log.log', filemode='w+', - logging_level=logging.INFO, - logging_format='%(asctime)s - %(levelname)s - %(message)s'): + logging_level=logging.INFO): logger = logging.getLogger(name) folder_path = os.path.dirname(os.path.abspath(__file__)) @@ -22,7 +22,7 @@ def configure_file_logger(name, filename='logs/converter_log.log', filemode='w+' file_handler = logging.FileHandler(file_path, mode=filemode) logger.addHandler(file_handler) - file_format = logging.Formatter(fmt=logging_format) + file_format = ColoredFormatter('%(asctime)s - %(levelname)s - %(message)s (%(filename)s:%(lineno)d)') file_handler.setFormatter(file_format) logger.setLevel(logging_level) return logger diff --git a/src/util/helpers.py b/src/util/helpers.py index 8ca5bad..b4e03d5 100644 --- a/src/util/helpers.py +++ b/src/util/helpers.py @@ -2,10 +2,30 @@ import os import logging +class ColoredFormatter(logging.Formatter): + MAPPING = { + 'DEBUG': 37, # white + 'INFO': 36, # cyan + 'WARNING': 33, # yellow + 'ERROR': 31, # red + 'CRITICAL': 41, # white on red bg + } + + PREFIX = '\033[' + SUFFIX = '\033[0m' + + def __init__(self, patern): + logging.Formatter.__init__(self, patern) + + def format(self, record): + seq = self.MAPPING.get(record.levelname, 37) # default white + record.levelname = ('{0}{1}m{2}{3}') \ + .format(self.PREFIX, seq, record.levelname, self.SUFFIX) + return logging.Formatter.format(self, record) + class BookLogger: def __init__(self, name, book_id, main_logger=None, - filemode='w+', logging_level=logging.INFO, - logging_format='%(asctime)s - %(levelname)s - %(message)s'): + filemode='w+', logging_level=logging.INFO): """ Method for Logger configuration. Logger will write to file. :param name: name of the Logger. @@ -23,7 +43,7 @@ class BookLogger: filename = f'logs/{book_id}_log.log' file_path = os.path.join(folder_path, filename) file_handler = logging.FileHandler(file_path, mode=filemode) - file_format = logging.Formatter(fmt=logging_format) + file_format = ColoredFormatter('%(asctime)s - %(levelname)s - %(message)s (%(filename)s:%(lineno)d)') file_handler.setFormatter(file_format) self.logger.addHandler(file_handler) self.logger.setLevel(logging_level)