基于python 标准库logging二次封装实现不同级别日志不同颜色输出、按天生成日志文件功能
import logging.handlers
import datetime
class ColoredFormatter(logging.Formatter):
COLOR_CODES = {
'DEBUG': '\033[94m', # 蓝色
'INFO': '\033[92m', # 绿色
'WARNING': '\033[93m', # 黄色
'ERROR': '\033[91m', # 红色
'CRITICAL': '\033[91m' # 红色
}
RESET_CODE = '\033[0m'
def format(self, record):
levelname = record.levelname
message = super().format(record)
color_code = self.COLOR_CODES.get(levelname, '')
reset_code = self.RESET_CODE if color_code else ''
formatted_message = f'{color_code}{message}{reset_code}'
return formatted_message
class ColoredFileHandler(logging.FileHandler):
def __init__(self, log_dir=None, mode='a', encoding=None, delay=False):
today = datetime.date.today()
if log_dir:
filename = f'{log_dir}/server.{today.strftime("%Y-%m-%d")}.log'
else:
filename = f'server.{today.strftime("%Y-%m-%d")}.log'
super().__init__(filename, mode, encoding, delay)
def logger(log_dir=None, level='DEBUG'):
log = logging.getLogger()
level = getattr(logging, level)
log.setLevel(level)
console_handler = logging.StreamHandler()
console_handler.setLevel(level)
console_formatter = ColoredFormatter('%(asctime)s %(levelname)s %(lineno)d --- [%(filename)s] : %(message)s')
console_handler.setFormatter(console_formatter)
log.addHandler(console_handler)
file_handler = ColoredFileHandler(log_dir)
file_handler.setLevel(level)
file_formatter = logging.Formatter('%(asctime)s %(levelname)s %(lineno)d --- [%(filename)s] : %(message)s')
file_handler.setFormatter(file_formatter)
log.addHandler(file_handler)
return log
__all__ = ['logger']
if __name__ == '__main__':
logger = logger()
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')
效果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)