简介
logging
模块是 Python 标准库的一部分,用于跟踪软件运行时发生的事件。您可以在代码中添加日志调用以指示发生了哪些事件。
logging
模块允许进行诊断日志记录,记录与应用程序操作相关的事件,以及记录用户交易事件以进行分析的审计日志。它特别用于将事件记录到文件中。
先决条件
您应该已经安装了 Python 3,并在计算机或服务器上设置了编程环境。如果您尚未设置编程环境,可以参考本地编程环境或适合您操作系统(Ubuntu、CentOS、Debian 等)的服务器编程环境的安装和设置指南。
为什么使用 logging
模块
logging
模块记录程序内发生的事件,使得可以查看与软件运行时发生的任何事件相关的输出。
您可能更习惯于使用 print()
语句来检查事件是否发生。print()
语句确实提供了一种基本的调试代码以解决问题的方法。虽然在代码中嵌入 print()
语句可以跟踪执行流程和程序的当前状态,但与使用 logging
模块相比,这种解决方案在可维护性上存在一些问题:
- 很难区分调试输出和正常程序输出,因为两者混在一起
- 在代码中分散使用
print()
语句时,没有有效的方法来禁用提供调试输出的语句 - 在调试完成后,删除所有
print()
语句变得困难 - 没有包含可用的诊断信息的日志记录
习惯在代码中使用 logging
模块是个好主意,因为这更适合于超出小型 Python 脚本范围的应用程序,并提供了一种可持续的调试方法。
由于日志可以显示应用程序开发过程中的行为和错误,它们还可以为您提供应用程序开发过程中正在发生的情况的更全面的图像。
将调试消息打印到控制台
如果您习惯使用 print()
语句来查看程序中发生的情况,您可能习惯于看到定义类并实例化对象的程序生成类似以下内容:
class Pizza():
def __init__(self, name, price):
self.name = name
self.price = price
print("Pizza created: {} (${})".format(self.name, self.price))
def make(self, quantity=1):
print("Made {} {} pizza(s)".format(quantity, self.name))
def eat(self, quantity=1):
print("Ate {} pizza(s)".format(quantity, self.name))
pizza_01 = Pizza("artichoke", 15)
pizza_01.make()
pizza_01.eat()
pizza_02 = Pizza("margherita", 12)
pizza_02.make(2)
pizza_02.eat()
以上代码中有一个 __init__
方法来定义 Pizza
类的 name
和 price
。然后有两个方法,一个叫做 make()
用于制作比萨饼,另一个叫做 eat()
用于吃比萨饼。这两个方法接受名为 quantity
的参数,该参数初始化为 1
。
现在让我们运行程序:
python pizza.py
我们将收到以下输出:
Pizza created: artichoke ($15)
Made 1 artichoke pizza(s)
Ate 1 pizza(s)
Pizza created: margherita ($12)
Made 2 margherita pizza(s)
Ate 1 pizza(s)
虽然 print()
语句允许我们看到代码正在工作,但我们可以使用 logging
模块来代替。
让我们删除或注释掉整个代码中的 print()
语句,并在文件顶部添加 import logging
:
import logging
class Pizza():
def __init__(self, name, value):
self