From 846160e961a03462b1e94336f6367fad55295bc9 Mon Sep 17 00:00:00 2001 From: Corentin Risselin Date: Fri, 6 Mar 2020 14:05:09 +0900 Subject: [PATCH] Initial commit --- utils/colored_formatter.py | 24 ++++++++++++++++ utils/console_color.py | 13 +++++++++ utils/logger.py | 58 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 95 insertions(+) create mode 100644 utils/colored_formatter.py create mode 100644 utils/console_color.py create mode 100644 utils/logger.py diff --git a/utils/colored_formatter.py b/utils/colored_formatter.py new file mode 100644 index 0000000..ce8f845 --- /dev/null +++ b/utils/colored_formatter.py @@ -0,0 +1,24 @@ +"""Formatter changing logger's record levelname to have colors in the console""" + + +import logging + +from .console_color import ConsoleColor + + +class ColoredFormatter(logging.Formatter): + """Formatter changing the record during format : adds colors to levelname""" + def format(self, record): + levelno = record.levelno + if logging.ERROR == levelno: + levelname_color = ConsoleColor.RED + record.levelname + ConsoleColor.ENDCOLOR + elif logging.WARNING == levelno: + levelname_color = ConsoleColor.ORANGE + record.levelname + ConsoleColor.ENDCOLOR + elif logging.INFO == levelno: + levelname_color = ConsoleColor.GREEN + record.levelname + ConsoleColor.ENDCOLOR + elif logging.DEBUG == levelno: + levelname_color = ConsoleColor.BLUE + record.levelname + ConsoleColor.ENDCOLOR + else: + levelname_color = record.levelname + record.levelname = levelname_color + return logging.Formatter.format(self, record) diff --git a/utils/console_color.py b/utils/console_color.py new file mode 100644 index 0000000..b2c8e1b --- /dev/null +++ b/utils/console_color.py @@ -0,0 +1,13 @@ +"""Colors for termial outputs""" + + +class ConsoleColor(object): + """Simple shortcut to use colors in console""" + HEADER = '\033[95m' + BLUE = '\033[94m' + GREEN = '\033[92m' + ORANGE = '\033[93m' + RED = '\033[91m' + ENDCOLOR = '\033[0m' + BOLD = '\033[1m' + UNDERLINE = '\033[4m' diff --git a/utils/logger.py b/utils/logger.py new file mode 100644 index 0000000..e6f92c4 --- /dev/null +++ b/utils/logger.py @@ -0,0 +1,58 @@ +from logging import handlers, StreamHandler +import logging +import os +import sys + +from .colored_formatter import ColoredFormatter + + +class DummyLogger(): + def debug(self, string, *args): + print(string, *args) + + def info(self, string, *args): + print(string, *args) + + def warn(self, string, *args): + print(string, *args) + + def warning(self, string, *args): + print(string, *args) + + def error(self, string, *args): + print(string, *args) + + def critical(self, string, *args): + print(string, *args) + + def fatal(self, string, *args): + print(string, *args) + + +def create_logger(name, log_dir, stdout=False): + logger = logging.getLogger(name) + os.makedirs(log_dir, exist_ok=True) + # Adding a (rotating) file handler to the logging system : outputing in capture.log + logger.setLevel(logging.DEBUG) + file_log_handler = handlers.RotatingFileHandler( + os.path.join(log_dir, name + '.log'), + maxBytes=500000, + backupCount=5) + file_log_handler.setLevel(logging.DEBUG) + log_formatter = logging.Formatter('%(asctime)s %(levelname)s : %(message)s') + file_log_handler.setFormatter(log_formatter) + logger.addHandler(file_log_handler) + + if stdout: + # Adding an handler to the logging system (default has none) : outputing in stdout + terminal_log_handler = StreamHandler(sys.stdout) + terminal_log_handler.setLevel(logging.DEBUG) + if os.name != 'nt': + # Fancy color for non windows console + colored_log_formatter = ColoredFormatter('%(asctime)s %(levelname)s : %(message)s') + terminal_log_handler.setFormatter(colored_log_formatter) + else: + terminal_log_handler.setFormatter(log_formatter) + logger.addHandler(terminal_log_handler) + + return logger