首页 > 技术文章 > logging日志记录模块,你想要的在这里

suanmiaoup 2020-02-23 22:43 原文

在任何程序中,日志记录功能必不可少,它有可以帮助我们追溯程序执行历史提供参考依据。

今天要实现的日志记录功能,使用到了Python的内置模块logging,它包含四个日志等级,从严重程度上划分为:CRITICAL、ERROR、WARNING、INFO、DEBUG。

除此之外,我们需要知logging默认收集WARNING以上等级的日志,默认收集对象为root。

 

那logging如何使用呢?

首先我们需要导入该模块:

import logging

接下来创建一个日志收集器对象:

# getLogger里可以带上收集器对象名称,例如‘xiaoming'
logger = logging.getLogger('xiaoming')

有了日志收集器对象后,我们怎么知道应该收集哪些日志呢?所以这里需要给日志收集器对象设置一个日志收集的等级阈值,比如设置为INFO,那么它会收集INFO及以上等级的日志,也就包括WARNING和ERROR,CRITICAL。

logger.setLevel('INFO')

如果程序当中所有的日志都被日志收集器对象成功收集,我们又去哪里看这些日志?一般来说,程序都有.log的日志文件,当然,保存到文件只是一种输出渠道,还有一种是输出到控制台,下面我们就来实现写日志到文件的输出渠道,

# 创建文件输出渠道
file_handler = logging.FileHandler('test.log', encoding='utf-8')
# 给文件输出渠道设置输出等级
file_handler.setLevel('WARNING')

没错,日志输出也要等级的,上面的内容表示只会把日志收集器中WARNING和ERROR,CRITICAL日志写入到文件,INFO日志则不会;它与日志收集等级并不冲突,一个限制输入,一个限制输出,

既然要把日志输出到test.log文件中,那每一条日志记录得格式又怎么配置,看下面代码:

formatter = logging.Formatter('%(asctime)s - [%(filename)s-->line:%(lineno)d] - %(levelname)s: %(message)s')
file_handler.setFormatter(formatter)

记录格式定下来后,最后只需要将输出渠道和日志收集器绑定即可:

logger.addHandler(file_handler)

 

到此为止,整个日志记录的主要流程全部实现,再封装一下,在其他地方调用即可。

推荐阅读