Python Logging 模块完全解读
admin
2023-07-08 18:24:20
0次

Python 中的 logging 模块可以让你跟踪代码运行时的事件,当程序崩溃时可以查看日志并且发现是什么引发了错误。Log 信息有内置的层级——调试(debugging)、信息(informational)、警告(warnings)、错误(error)和严重错误(critical)。你也可以在 logging 中包含 traceback 信息。不管是小项目还是大项目,都推荐在 Python 程序中使用 logging。本文将简单清晰地介绍如何使用 logging 模块。

为什么使用 logging?

当你运行一个 Python 脚本时,你可能想要知道脚本的哪个部分在执行,并且检视变量的当前值。

通常,可以只使用print()打印出你想要的信息。在小程序中,可能靠这个就足够了。

但问题是,当你处理有很多个模块的大项目时,就需要一个更加灵活的方法。

为什么?

因为代码需要经历开发、调试、审查、测试或者上线等不同阶段。在开发时你想要打印的信息类型可能和上线后你想看到的信息类型完全不同。

也就是说,在“测试”时,你可能只想看警告和错误信息,然而在“调试”时,你可能还想看到跟调试相关的信息。

如果你还想打印出使用的模块以及代码运行的时间,那么你的代码很容易变得混乱。

使用logging模块,这些问题就能很容易地解决。

logging模块可以:

控制信息层级,仅记录需要的信息。

控制显示或者保存日志的时机。

使用内置信息模板控制日志格式。

知晓信息来自于哪个模块。

基本 logging 例子

logging模块是 Python 的标准库,要使用 logging,只需要使用logging.basicConfig()进行基本设置。事实上,这也是可选的。

然后就可以调用logging.{level}(message)在控制台中显示信息。


Python Logging 模块完全解读

打印出的日志信息遵循默认格式:{LEVEL}:{LOGGER}:{MESSAGE}。

上面的例子中,LEVEL就是INFO,因为调用的是logging.info()。

LOGGER为root,因为这是默认 logger。

logger(日志记录器)类似于一个实体,你可以创建并配置它来记录不同类型和格式的消息。

你可以配置一个输出到控制台的 logger 和另一个将日志发送到文件的 logger,它们具有不同的日志记录级别,并且特定于给定模块。

最后,输出的信息就是我传递给logging.info()的字符串。

那么如果不设置logging.basicConfig(level=logging.INFO)会怎么样?

答案是日志信息不会被打印出来。

为什么?要知道这个需要先了解 logging 的级别。

logging 的 5 个级别

logging有 5 个不同层次的日志级别,可以将给定的 logger 配置为这些级别:

DEBUG:详细信息,用于诊断问题。Value=10。

INFO:确认代码运行正常。Value=20。

WARNING:意想不到的事情发生了,或预示着某个问题。但软件仍按预期运行。Value=30。

ERROR:出现更严重的问题,软件无法执行某些功能。Value=40。

CRITICAL:严重错误,程序本身可能无法继续运行。Value=50。

现在,让我们回答之前提出的问题。默认 logger 是root,其默认的 basicConfig 级别是WARNING。也就是说,只有来自logging.warning或者更高级别的信息才会被记录下来。

因此,logging.info()中的信息不会被打印出来。这也是为什么 basicConfig 被设为INFO。

如果级别使用logging.ERROR代替,只有来自logging.error和logging.critical的信息会被记录。


Python Logging 模块完全解读

将日志记入文件

要从 root logger 将日志消息发送到文件,需要在logging.basicConfig()中设置 file 参数:


Python Logging 模块完全解读

现在,所有后续日志消息都将直接记录到当前工作目录中的“sample.log“文件。如果要将其记录到另一个目录中的文件,请给出完整的文件路径。

如何更改 logging 格式

logging 模块提供了向日志消息添加各种详细信息的速记表。

Python Logging 模块完全解读

让我们更改日志信息格式以显示TIME、LEVEL和MESSAGE。


Python Logging 模块完全解读

不要对所有模块使用 root logger

让我们看下面的代码:


Python Logging 模块完全解读

如果项目中有一个或多个模块。这些模块使用基本根模块。然后,当导入模块myprojectmodule.py时,将运行该模块的所有代码并配置 logger。

一旦配置好,main文件中的 root logger 将不能再更改 root logger 设置。因为,一旦设置好logging.basicConfig(),就不能再更改它。

如果想在不同文件中使用不同 logger,就需要创建一个新的 logger。

如何创建一个新的 logger?

可以使用logger.getLogger(name)方法创建一个新的 logger。如果存在同名的 logger,则将使用该 logger。

可以给 logger 取任何名字,但是通常使用__name__变量:


相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...