基于python 标准库logging二次封装实现不同级别日志不同颜色输出、按天生成日志文件功能

发布时间 2023-09-21 16:02:18作者: 时光煮酒丶
import logging
from logging import handlers, Formatter
from colorama import Fore, Style, init

# 初始化colorama库
init(autoreset=True)


class ColoredFormatter(Formatter):
    _log_colors = {
        'DEBUG': Fore.CYAN,
        'INFO': Fore.GREEN,
        'WARNING': Fore.YELLOW,
        'ERROR': Fore.RED,
        'CRITICAL': Fore.RED + Style.BRIGHT,
    }

    def format(self, record) -> str:
        log_message = super(ColoredFormatter, self).format(record)
        color = self._log_colors.get(record.levelname, "")
        return f"{color}{log_message}"


class Logger(logging.Logger):
    def __init__(self, log_file: str, level: str = "DEBUG"):
        super(Logger, self).__init__(self)
        level = getattr(logging, level)
        fh = handlers.TimedRotatingFileHandler(log_file, 'D', 1, 30)
        fh.suffix = "%Y%m%d-%H%M.log"
        fh.setLevel(level)
        ch = logging.StreamHandler()
        ch.setLevel(level)
        formatter = ColoredFormatter('%(asctime)s  %(levelname)s %(lineno)d --- [%(filename)s] : %(message)s')
        fh.setFormatter(formatter)
        ch.setFormatter(formatter)
        self.addHandler(fh)
        self.addHandler(ch)


__all__ = ['Logger']

if __name__ == '__main__':
    logger = Logger("my_log.log")
    logger.debug("This is a debug message")
    logger.info("This is an info message")
    logger.warning("This is a warning message")
    logger.error("This is an error message")
    logger.critical("This is a critical message")

效果:
image