Source code for utils.logger_setup
"""
This module provides standardized logging configuration for the project.
Includes console output with colors and a rotating file log.
"""
import logging
import sys
from logging.handlers import RotatingFileHandler
from colorlog import ColoredFormatter
[docs]
def setup_universal_logging(
default_level: int = logging.INFO, log_file: str = "app.log"
) -> None:
"""Sets up a global logging configuration for the entire project.
Includes colorized console output and plain text file output.
Args:
default_level (int, optional): The logging level for the root logger.
Defaults to logging.INFO.
log_file (str, optional): The name of the log file to be created.
Defaults to "app.log".
"""
# 1. Create the root logger
root_logger = logging.getLogger()
root_logger.setLevel(default_level)
# Clean up any existing handlers (prevents double-logging if called twice)
if root_logger.hasHandlers():
root_logger.handlers.clear()
# 2. Define Formats
# Console format: Level [Module Name] Message
console_format = (
"%(log_color)s%(levelname)-8s %(cyan)s[%(name)s]%(reset)s %(blue)s%(message)s"
)
console_formatter = ColoredFormatter(
console_format,
log_colors={
"DEBUG": "white",
"INFO": "green",
"WARNING": "yellow",
"ERROR": "red",
"CRITICAL": "bold_red",
},
)
# File format: Standard ISO timestamp and detailed info
file_format = (
"%(asctime)s - %(name)s - %(levelname)s - %(filename)s:%(lineno)d - %(message)s"
)
file_formatter = logging.Formatter(file_format)
# 3. Create Handlers
# Console (stdout)
console_handler = logging.StreamHandler(sys.stdout)
console_handler.setFormatter(console_formatter)
# File (Rotating to save space)
file_handler = RotatingFileHandler(
log_file, maxBytes=5 * 1024 * 1024, backupCount=2
)
file_handler.setFormatter(file_formatter)
# 4. Add handlers to root logger
root_logger.addHandler(console_handler)
root_logger.addHandler(file_handler)
logging.debug("Universal logging initialized.")