Source code for fortrace.utility.logger_helper

import logging
import os
import sys
import time

from pythonjsonlogger.json import JsonFormatter

from fortrace.fortrace_definitions import FORTRACE_ROOT_DIR

log_file_path = os.path.join(
    FORTRACE_ROOT_DIR, "log", time.strftime("%Y%m%d_%H%M%S.log")
)


[docs] class CustomFormatter(logging.Formatter): """CustomFormatter, providing colorful output to the console.""" grey = "\x1b[38;20m" yellow = "\x1b[33;20m" red = "\x1b[31;20m" bold_red = "\x1b[31;1m" reset = "\x1b[0m" log_msg_format = "[%(threadName)16s] :: %(asctime)s - %(levelname)-8s - %(message)s" FORMATS = { logging.DEBUG: grey + log_msg_format + reset, logging.INFO: grey + log_msg_format + reset, logging.WARNING: yellow + log_msg_format + reset, logging.ERROR: red + log_msg_format + reset, logging.CRITICAL: bold_red + log_msg_format + reset, }
[docs] def format(self, record): log_fmt = self.FORMATS.get(record.levelno) formatter = logging.Formatter(log_fmt) return formatter.format(record)
console_default_log_level = os.environ.get("CONSOLE_LOG_LEVEL", "INFO").upper() ch = logging.StreamHandler(stream=sys.stdout) ch.setLevel(console_default_log_level) ch.setFormatter(CustomFormatter()) json_formatter = JsonFormatter( "{threadName}{levelname}{asctime}s{message}s{pathname}s:{lineno}d", style="{" ) json_formatter.datefmt = "%Y-%m-%d %H:%M:%S" fh = logging.FileHandler(log_file_path) fh.setLevel(logging.DEBUG) fh.setFormatter(json_formatter)
[docs] def setup_logger(name: str) -> logging.Logger: """Create a logger with the specified name. Please refer to https://docs.python.org/3/howto/logging-cookbook.html for more information. Especially relevant is https://docs.python.org/3/howto/logging-cookbook.html#patterns-to-avoid Args: name: name of the logger to be created. Should be __name__ in most cases Returns: a new logger instance """ # create logger logger = logging.getLogger(name) logger.setLevel(logging.DEBUG) logger.propagate = False logger.addHandler(ch) logger.addHandler(fh) return logger