Python的logging函数
Python的logging函数
选择自己喜欢的颜色
运行如下代码,查看颜色
import logging
logging.error("\033[1;29m this is color1 \033[0m")
logging.error("\033[1;30m this is color2 \033[0m")
logging.error("\033[1;31m this is color3 \033[0m")
logging.error("\033[1;32m this is color4 \033[0m")
logging.error("\033[1;33m this is color5 \033[0m")
logging.error("\033[1;34m this is color6 \033[0m")
logging.error("\033[1;35m this is color7 \033[0m")
logging.error("\033[1;36m this is color8 \033[0m")
结果得到:
开始自己构建Logging类
需要继承logging.Logger类,关键在于重构***callHandlers***方法,使屏幕输出模式时不向上兼容
完整代码如下,有兴趣的可参考
import logging
format_base = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d] %(message)s'
file_format = '[%(asctime)s][%(pathname)s][line:%(lineno)d][%(levelname)s]-[%(message)s]'
date_format = '%Y-%m-%d %H:%M:%S'
config = {
'debug': '\033[1;29m',
'info': '\033[1;36m',
'warning': '\033[1;33m',
'error': '\033[1;31m',
'critical': '\033[1;31m',
}
class MyLog(logging.Logger):
def __init__(self):
super().__init__(__name__)
self._add_all_steam_handler()
# 重写方法,使屏幕输出模式不向上兼容,文件输出则保留原样
def callHandlers(self, record):
c = self
while c:
for hdlr in c.handlers:
if hdlr.__class__.__name__ == 'StreamHandler' and record.levelno == hdlr.level:
hdlr.handle(record)
if hdlr.__class__.__name__ == 'FileHandler' and record.levelno >= hdlr.level:
hdlr.handle(record)
if not c.propagate:
c = None # break out
else:
c = c.parent
# 添加所有steam_handler,每一个方法对应一个handler
def _add_all_steam_handler(self):
for method, color in config.items():
fmt = '{} {} {}'.format(color, format_base, '\033[0m')
handler = logging.StreamHandler()
handler.setFormatter(logging.Formatter(fmt, datefmt=date_format))
handler.setLevel(method.upper())
self.addHandler(handler)
# 生产环境会需要日志文件!
def set_file_log(self, filename='log.log', _level=logging.WARNING):
# 输出到文件
file_handler = logging.FileHandler(filename=filename, mode='a', encoding='utf8')
file_handler.setLevel(_level)
file_handler.setFormatter(logging.Formatter(file_format, datefmt=date_format))
self.addHandler(file_handler)
log = MyLog()
if __name__ == '__main__':
log.debug('debug')
log.info('info')
log.warning('warning')
log.error('error')
log.critical('critical')
输出结果为: