18:58 pm, 11th April, Friday, 2025
import os
import sys
import logging
class ColorLevelFormatter(logging.Formatter):
RESET = "\033[0m"
COLORS = {
logging.DEBUG: "\033[94m", # Blue
logging.INFO: "\033[92m", # Green
logging.WARNING: "\033[93m", # Yellow
logging.ERROR: "\033[91m", # Red
logging.CRITICAL: "\033[95m" # Magenta
}
PATH_COLOR = "\033[96m" # Cyan
FUNC_COLOR = "\033[93m" # Yellow
LINE_COLOR = "\033[95m" # Magenta
MODULE_COLOR = "\033[91m" # Tomato
def format(self, record):
level_color = self.COLORS.get(record.levelno, self.RESET)
record.levelname = f"{level_color}{record.levelname}{self.RESET}"
record.pathname = f"{self.PATH_COLOR}{record.pathname}{self.RESET}"
record.funcName = f"{self.FUNC_COLOR}{record.funcName}{self.RESET}"
record.lineno = f"{self.LINE_COLOR}{record.lineno}{self.RESET}"
record.module = f"{self.MODULE_COLOR}{record.module}{self.RESET}"
return super().format(record)
def setup_logger(
name: str = __name__,
logfile: str = "logfile.log",
level: int = None,
stream: bool = True
) -> logging.Logger:
logger = logging.getLogger(name)
logger.setLevel(level or os.getenv("LOG_LEVEL", logging.DEBUG))
# File handler with no colors
file_handler = logging.FileHandler(logfile)
file_handler.setLevel(logging.DEBUG)
file_formatter = logging.Formatter(
"%(asctime)s %(levelname)-6s {%(pathname)s} (%(funcName)s:%(lineno)s) %(message)s",
datefmt="%d-%m-%Y %H:%M:%S"
)
file_handler.setFormatter(file_formatter)
logger.addHandler(file_handler)
# Console handler with color
if stream:
console_handler = logging.StreamHandler(sys.stdout)
console_handler.setLevel(logging.DEBUG)
console_formatter = ColorLevelFormatter(
"%(levelname)-6s {%(module)s} (%(funcName)s:%(lineno)s) %(message)s"
)
console_handler.setFormatter(console_formatter)
logger.addHandler(console_handler)
return logger
Example Usage
# Example usage logger = setup_logger() if __name__ == "__main__": logger.debug("This is a debug message.") logger.info("This is an info message.") logger.warning("This is a warning.") logger.error("This is an error.") logger.critical("Critical issue occurred!")
Links : TODO
Tags :
Date : 11th April, Friday, 2025, (Wikilinks: 11th April, April 25, April, 2025. Friday)
Category : Others