1. 问题的由来

我们在运行代码的时候,总是期望可以获得更多的信息,并记录潜在错误。我们不妨可以使用​​Logging​​模块来代替常见的​​print​​语句,以此来协助帮助我们进行简洁的日志输出。


2. 为什么需要使用Logging模块

​Logging​​模块允许我们获取特定代码中错误调试信息。对于一些小型项目,简单的​​print​​操作有助于帮主我们协助定位语句中的错误。但在一些更加复杂的项目中,比如某些项目中含有多个函数和子模块,此时使用​​logging​​是一个更好、更有助于条理输出的选择。

总之,弄明白​​Logging​​模块的配置虽然是复杂的,但是绝对是值得的。


3. Logging 导入

​Logging​​模块是Python的内置模块,所以我们无需再显示进行安装。如果我们想要使用该模块,可以直接使用以下语句:


import logging

其中,​​Logging​​模块有很多内容,但是今天主要分享一个基础例子和一个高级例子供大家学习。


4. Logging Levels

日志记录级别(Logging Levels)允许我们设置更加具体的输出日志等级,例如调试信息、INFO信息,或者错误信息。
常见的日志等级包括:

Levels

Descriptions

DEBUG

Detailed information. mostly for diagnostics

INFO

Mostly to confirm that something is working.

WARNING

Something happens that can create problems in the future.

ERROR

A serious problem. the software cannot perform the action.

CRITICAL

Serious Error. software unable to continue.

默认的日志等级为 ​​WARNING​​,如果我们未对日志级别进行配置,则只输出等级高于​​WARNING​​的消息,即​​ERROR​​和​​CRITICAL​​消息。


5. 基础用法

如果我们需要改变日志输出的级别,可以通过​​basicConfig​​函数进行配置,样例如下:

一文弄懂Python中的Logging模块_python

同时我们也可以将输出信息输出至文件中,相应的配置语句如下:

一文弄懂Python中的Logging模块_日志文件_02

更近一步,如果我们需要规定输出信息的格式,我们可以对参数​​format​​进行相应的设置,代码如下:

一文弄懂Python中的Logging模块_日志文件_03

上述代码中,我们通过设置​​format​​参数,可以将输出的信息按照​​time-message​​的格式进行规范化输出。当然我们也可以定义自己喜欢的输出格式。

最后给出一个完整的样例,如下:

一文弄懂Python中的Logging模块_python_04

我们查看相应的log文件,输出如下:

2022-04-28 22:12:26,095-10

可以看书,在最后的​​-​​号之前为当前语句的运行时间,之后为我们调试的输出信息,也就是变量​​sum​​的取值。


6. 高级用法

接下来我们来分享一些​​Logging​​模块中更为实用的高级用法,首先我们一般根据相应的​​py​​文件名来生成相应的输出日志文件,样例如下:

一文弄懂Python中的Logging模块_日志文件_05

我们使用上述日志文件命名的方式可以方便我们快速的知道当前的调试信息是在那个子模块中。
同时,我们一般使用​​setLevel()​​函数来设置相应的日志等级,样例如下:

一文弄懂Python中的Logging模块_日志文件_06

当然我们也可以使用​​FileHandler​​来创建输出日志文件,样例如下:

一文弄懂Python中的Logging模块_日志文件_07

当然,我们我们希望同时可以将日志信息输出在控制台,我们可以使用​​StreamHandler​​来实现,样例如下:

一文弄懂Python中的Logging模块_python_08

接着,我们可以通过​​Formatter​​来设置输出日志的格式,样例代码如下:

一文弄懂Python中的Logging模块_python_09

最后,我们将上述所有的操作拼到一起,得到如下配置设定:

一文弄懂Python中的Logging模块_日志文件_10

在具体应用中,我们每次的调用形式如下:

logger.info(f'Starting script')

7. 总结

本文重点介绍了在Python中如何使用​​Logging​​模块来优雅地创建日志并进行相应的配置管理。

您学废了吗?

一文弄懂Python中的Logging模块_python_11

关注公众号《AI算法之道》,获取更多AI算法资讯。