一个彩色的日志,用于在输出框里输出彩色字体,并在文件保持处生成正常的字体
我这里的命名方式为:colors_logger.py
# -*- coding: utf-8 -*
# @Time : 2024/8/14 15:08
# @Author : huakuohao
# @File : colors_logger.py
# @Project : B_daily_Project
# @Software: PyCharm
# love
# If I can't be a god, I'll be a beast
import logging
import sys
import os
import time
# 公众号:右恩
class TerminalColor:
RED = '\033[91m'
GREEN = '\033[92m'
YELLOW = '\033[93m'
RESET = '\033[0m'
BLUE = '\033[94m'
MAGENTA = '\033[95m'
CYAN = '\033[96m'
WHITE = '\033[97m'
'''
30:黑色
31:红色
32:绿色
33:黄色(或称为棕色或橄榄色)
34:蓝色
35:品红(或称为紫色)
36:青色(或称为蓝绿色)
37:白色
90-97:亮色版本(亮黑、亮红、亮绿、亮黄、亮蓝、亮品红、亮青、亮白)
'''
class ColorFormatter(logging.Formatter):
COLORS = {
logging.DEBUG: TerminalColor.CYAN,
logging.INFO: TerminalColor.BLUE,
logging.WARNING: TerminalColor.MAGENTA,
logging.ERROR: TerminalColor.RED,
logging.CRITICAL: TerminalColor.GREEN
}
def format(self, record):
level_color = self.COLORS.get(record.levelno, TerminalColor.RESET)
reset_color = TerminalColor.RESET
message = super().format(record)
return f"{level_color}{message}{reset_color}"
def _reset_logger(log):
for handler in log.handlers:
handler.close()
log.removeHandler(handler)
del handler
log.handlers.clear()
log.propagate = False
console_handle = logging.StreamHandler(sys.stdout)
console_handle.setFormatter(
ColorFormatter(
"%(asctime)s- %(levelname)s - [%(filename)s:%(lineno)d] - %(message)s",
datefmt="%H:%M:%S",
)
)
log_name = os.path.join(_ensure_log_path(), f"{time.strftime('%Y_%m_%d')}.log")
file_handle = logging.FileHandler(log_name, encoding="utf-8")
file_handle.setFormatter(
logging.Formatter(
"[%(asctime)s][%(levelname)s][%(filename)s:%(lineno)d] - %(message)s",
datefmt="%Y-%m-%d %H:%M:%S",
)
)
log.addHandler(file_handle)
log.addHandler(console_handle)
# 公众号:右恩
def _ensure_log_path():
log_path = os.path.join(os.getcwd(), 'logs')
os.makedirs(log_path, exist_ok=True)
return log_path
def _get_logger():
log = logging.getLogger("log")
_reset_logger(log)
log.setLevel(logging.DEBUG)
return log
# 日志句柄
logger = _get_logger()
if __name__ == '__main__':
logger.info('This is an info message')
logger.debug('This is a debug message')
logger.warning('This is a warning message')
logger.error('This is an error message')
logger.critical('This is a critical message')
后续调用
from colors_logger import logger
logger.info("这是一个日志")
# 公众号:右恩