Skip to content

Logger setup


Logger common setup

import logging
import os

def get_logger(name):
    logger = logging.getLogger(name)
    logger.propagate = False

    # terminal output
    console = logging.StreamHandler()
    simple_formatter = logging.Formatter('%(name)s - %(message)s')
    console.setFormatter(simple_formatter)
    logger.addHandler(console)

    # full logging syntax in the log file
    log_file_path = os.getenv("LOG_FILE")
    if log_file_path:
        extended_formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
        fh = logging.FileHandler(log_file_path)
        fh.setFormatter(extended_formatter)
        logger.addHandler(fh)

    # it defines which level to output
    log_level = os.getenv("LOG_LEVEL")
    if log_level is None:
        raise Exception("Global Env: LOG_LEVEL is not set, did you forget to set env file or env variables?")
    logger.setLevel(log_level)
    return logger

# can be used like this:
logger = get_logger(__name__)
logger.info("hi")

Coloring logging

import logging
import os

# Define a custom formatter
class CustomFormatter(logging.Formatter):

    CYAN = '\033[96m'
    PINK = '\033[95m'
    PURPLE = '\033[94m'
    YELLOW = '\033[93m'
    GREEN = '\033[92m'
    RED = '\033[91m'
    GREY = '\033[90m'
    RESET = '\033[0m'
    BOLD = '\033[1m'
    UNDERLINE = '\033[4m'

    # format = "%(asctime)s - %(name)s - %(levelname)s - %(message)s (%(filename)s:%(lineno)d)"
    format = "%(name)s - %(message)s"

    FORMATS = {
        logging.DEBUG: GREY + format + RESET,
        logging.INFO: RESET + format + RESET,
        logging.WARNING: YELLOW + format + RESET,
        logging.ERROR: RED + format + RESET,
        logging.CRITICAL: PINK + format + RESET
    }

    def format(self, record):
        log_fmt = self.FORMATS.get(record.levelno)
        formatter = logging.Formatter(log_fmt)
        return formatter.format(record)

# When register logger, use the formatter:
console = logging.StreamHandler()
console.setFormatter(CustomFormatter())
logger.addHandler(console)

Comments