Aug
10
2022
python logging 模块 打印不同颜色日志
logger 日志器对象,提供了应用程序可一直使用的接口
handler 处理器 将logger 创建的日志记录发送到合适的目的输出
Filter 过滤器。提供了更细粒度的控制工具来决定输出哪条日志记录
Formatter 格式器,决定日志记录的最终输出格式
获取日志对象的方法1、实例化logger对象(但是不经常使用),2、logging.getlogger()方法获取日志对象
Handler的作用是将消息分发到handler指定的位置(文件、网络、邮件等),logger对象可以通过addhandler()方法为自己添加
0个或者多个handler对象,比如一个应用程序有几个日志需求
1、把所有日志发送到一个文件中
2、把大于error级别的日志输送到 stdout 标准输出
3、把大于 critical 级别的日志 输出到email
就需要不同的handler来实现不同的功能,最后用logger对象的addHandler()方法进行添加
#!/usr/bin/env python import logging import colorlog import os,sys import time class LogHandler(object): def __init__(self,filename, level=logging.INFO): self.logger = logging.getLogger(filename) self.log_colors_config = { 'DEBUG': 'cyan', 'INFO': 'green', 'WARNING': 'yellow', 'ERROR': 'red', 'CRITICAL': 'red', } formatter = colorlog.ColoredFormatter( '%(log_color)s%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s: %(message)s', log_colors=self.log_colors_config) # 设置日志级别 self.logger.setLevel(level) # 往屏幕上输出 console_handler = logging.StreamHandler() # 输出到文件 file_handler = logging.FileHandler(filename=filename, mode='a', encoding='utf8') file_formatter = logging.Formatter('%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s: %(message)s') # 设置屏幕上显示的格式 console_handler.setFormatter(formatter) # 设置写入文件的格式 file_handler.setFormatter(file_formatter) # 把对象加到logger里 self.logger.addHandler(console_handler) self.logger.addHandler(file_handler) def console(message): if message: sys.stdout.write('\r'+str(message)) sys.stdout.flush() INFO = LogHandler('info.log',level=logging.INFO) ERROR = LogHandler('error.log',level=logging.ERROR) WARNING = LogHandler('warning.log',level=logging.WARNING) DEBUG = LogHandler('debug.log',level=logging.DEBUG) if __name__ == '__main__': INFO.logger.info("测试info") ERROR.logger.error("error") WARNING.logger.warning("warning") DEBUG.logger.debug("debug") i=1 while True: LogHandler.console(i) time.sleep(1) i+=1
最活跃的读者