Python 模块 logging-记录日志

Python 模块 logging-记录日志

logging 模块定义了标准的 API 接口,记录应用或库的一些状态、错误和日志等信息。标准库为我们定义了 logging 模块可以控制整个应用的日志信息,包含第三方库的日志,例如设置记录哪些级别的日志。

组件


日志系统包含4个可交互的对象,模块或应用使用 Logger 实例添加信息到日志系统。它会在内存中创建 LogRecord 对象。一个 Logger 实例会包含一些 Handler 对象接收日志记录,Handler 使用对象 Formatter 转换日志消息的格式。

应用和库


应用开发者和库开发者都可以使用 logging 模块,只是目的不一样。

应用开发者配置日志消息的格式,输出到合适的通道中。设置记录什么等级的消息。Handlers 控制消息记录在文件中、HTTP,邮箱和 Socket。

库开发者相对应用开发者要做的更少一些。只是简单的创建一个 Logger 对象,指定特定的名称,然后根据日志等级记录消息,这样可以由应用控制哪些级别的消息显示或者隐藏。

记录到文件


大多应用都是记录日志消息到文件,使用 basicConfig() 函数设置默认的 Handler 把调试的信息记录到指定的文件。

Python 模块 logging-记录日志

执行:

Python 模块 logging-记录日志

记录多个文件


上例中脚本执行多次,文件会就会被写入多次。为了防止文件过大,可以写入不同的文件。也可以使用 RotatingFileHandler 自动为我们创建新的文件。

Python 模块 logging-记录日志

执行:

Python 模块 logging-记录日志

使用 RotatingFileHandler,每次当文件达到指定的大小时,就会重命名添加后缀 .1,已经存在的文件后缀会自动增加,例如 .1 变为 .2,.2 变为 .3 。属性 backupCount 控制生成多少个日志文件。

日志等级


logging API一个有用的特性就是消息分为不同的等级,这样可以控制哪些日志要记录在开发环境,或者哪些日志记录在生产环境。

  • CRITICAL: 值为 50
  • ERROR: 值为 40
  • WARNING: 值为 30
  • INFO: 值为 20
  • DEBUG: 值为 10
  • NOTSET: 值为 0

日志消息只记录设置的等级或者更高的。例如如果设置记录日志的等级为 ERROR,那么 ERROR 和 CRITICAL 等级的日志消息都会记录(50>40)。

Python 模块 logging-记录日志

执行:

Python 模块 logging-记录日志

这里,只输出了 WARNING 级别之上的日志消息。

当设置了级别 NOTSET 时,所有的消息都会处理。

命名的 Logger 实例


可以使用命名的 Logger 实例区分不同的日志来源,例如多个模块使用各自的日志对象。日志消息就会包含 Logger 的名称,下面使用不同的 Logger 实例记录消息。

Python 模块 logging-记录日志

执行:

Python 模块 logging-记录日志

查看输出,日志消息中包含了各自的模块名称。


分享到:


相關文章: