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")
效果: