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

微信扫一扫,打赏作者吧~
最活跃的读者