Python之日志处理-logging模块使用教程

Logging模块

日志记录是跟踪某些软件运行时发生的事件的一种方法。该软件的开发人员将日志调用添加到代码中,以表明发生了某些事件。事件由描述性消息描述,该消息可选地包含变量数据(例如,对于每个事件的发生可能不同的数据)。事件也具有开发人员将其归因于事件的重要性;重要性也可以称为级别或严重性。

日志记录基本方法

诊断问题。

确认代码是否按预期工作。

表明一些意想不到的事情发生了,或说明一些问题在不久的将来(例如低磁盘空间)。

由于一个更严重的问题,程序没能执行一些功能。

一个严重的错误,这表明程序本身可能无法继续运行。

举个栗子

一个简单的栗子

执行输出:

可以看出logging默认Log级别为。

将日志记录到文件

执行后,脚本当前目录会多一个文件。

进阶

logging库采用了模块化的方式,提供了4种类别的组件,分别为: and 。

loggers 提供应用程序代码直接使用的接口。

handlers 用于将日志记录发送到指定的目的位置。

filters 提供更细粒度的日志过滤功能,用于决定哪些日志记录将会被输出(其它的日志记录将会被忽略)。

formatters 用于控制日志信息的最终输出格式。

loggers

loggers对象有三个功能,首先是向公开方法,方便程序运行时记录日志。其次是根据日志级别来筛选日志,最后,将日志传给符合的handlers。

logger.setLevel() 设置日志级的级别。

logger.addHandler() 从loggers对象中添加handlers对象。

logger.removeHandler() 从loggers对象中删除handlers对象。

logger.addFilter() 从loggers对象中添加filters对象。

logger.removeFilter() 从loggers对象中删除filters对象。

handlers

handler 负责将特定程度的日志级别发送消息到一个特定的位置。

handler.setLevel() 设置日志级的级别,为什么会有两个设置日志级别?logger设置的级别是确定哪种级别的消息将传递给handler,handler设置的级别是确定发送哪种级别的消息。

handler.setFormatter() 设置handler的formatter对象。

addFilter() 将Filter对象添加到handler对象上。

removerFilter() 从handler对象上移除Filter对象。

formatters

格式化程序对象配置日志消息的最终顺序、结构和内容。

filters

Filter可以被Handler和Logger用来做比level更细粒度的、更复杂的过滤功能。Filter是一个过滤器基类,它只允许某个logger层级下的日志事件通过过滤。

示例代码

执行后输出

使用配置的方式:

下面是log.conf文件

py文件

执行后和上面的输出的结果一样。

配置文件的方式相比代码的方式有以下的优点:

代码看上去更加整洁,便于阅读

配置的方式以后修改只需改配置文件,不需要更改代码

实例

现在有以下几个日志记录的需求:

要求将所有级别的所有日志都写入磁盘文件中。

all.log文件中记录所有的日志信息,日志格式为:日期和时间 - 日志级别 - 日志信息。

error.log文件中单独记录error及以上级别的日志信息,日志格式为:日期和时间 - 日志级别 - 文件名[:行号] - 日志信息。

要求all.log在每天凌晨进行日志切割。

all.log

error.log

End

如果你觉得还不错,那就点个赞吧

听说喜欢留言、分享的人

运气都不会差

python笔记侠

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180620A1J5Q400?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券