48 lines
1.3 KiB
Python
48 lines
1.3 KiB
Python
import logging
|
|
|
|
|
|
class ColorFormatter(logging.Formatter):
|
|
"""Custom formatter with colored output based on log level"""
|
|
|
|
# ANSI color codes
|
|
GREY = "\x1b[38;21m"
|
|
GREEN = "\x1b[92m"
|
|
YELLOW = "\x1b[93m"
|
|
RED = "\x1b[91m"
|
|
BOLD_RED = "\x1b[31;1m"
|
|
RESET = "\x1b[0m"
|
|
|
|
# Format including function name
|
|
FORMAT = "%(asctime)s | %(funcName)s | %(message)s"
|
|
|
|
FORMATS = {
|
|
logging.DEBUG: GREY + FORMAT + RESET,
|
|
logging.INFO: GREEN + FORMAT + RESET,
|
|
logging.WARNING: YELLOW + FORMAT + RESET,
|
|
logging.ERROR: RED + FORMAT + RESET,
|
|
logging.CRITICAL: BOLD_RED + FORMAT + RESET
|
|
}
|
|
|
|
def format(self, record):
|
|
log_format = self.FORMATS.get(record.levelno)
|
|
formatter = logging.Formatter(log_format)
|
|
return formatter.format(record)
|
|
|
|
|
|
def setup_logger(name, level=logging.INFO):
|
|
"""Set up a logger with the custom color formatter"""
|
|
logger = logging.getLogger(name)
|
|
logger.setLevel(level)
|
|
|
|
# Create console handler
|
|
console_handler = logging.StreamHandler()
|
|
console_handler.setLevel(level)
|
|
|
|
# Add formatter to console handler
|
|
console_handler.setFormatter(ColorFormatter())
|
|
|
|
# Add console handler to logger
|
|
logger.addHandler(console_handler)
|
|
|
|
return logger
|