日志是追踪软件运行过程中发生的事件的一种机制。通过在代码中添加日志记录语句,开发人员可以记录程序运行时的重要信息,例如程序执行状态、变量值、错误信息等。这些信息可以帮助开发人员调试程序、监控系统运行状况以及分析程序行为。
每个日志记录都包含一个描述信息,用于说明事件的内容,以及一个严重性级别(也称为等级)。
日志级别
日志级别用于区分事件的重要程度。Python 的 logging
模块定义了以下五个标准日志级别:
级别 | 何时使用 |
---|---|
DEBUG | 细节信息,仅当诊断问题时适用。例如,记录函数的参数和返回值。 |
INFO | 确认程序按预期运行。例如,记录程序启动时间、完成的任务数量。 |
WARNING | 表明有已经或即将发生的意外事件。例如,磁盘空间不足,但程序仍能继续运行。 |
ERROR | 由于严重的问题,程序的某些功能已经不能正常执行。例如,数据库连接失败。 |
CRITICAL | 严重的错误,表明程序已不能继续执行。例如,内存耗尽。 |
默认的日志级别是 WARNING
,这意味着只有 WARNING
、ERROR
和 CRITICAL
级别的日志会被记录。
使用日志记录器
在 Python 中使用日志功能,首先需要创建一个日志记录器对象。可以使用 logging.getLogger()
函数来获取一个记录器:
import logging
# 获取名为 __name__ 的记录器
# __name__ 是当前模块的名称,可以帮助区分不同模块的日志
logger = logging.getLogger(__name__)
获取记录器后,可以使用以下方法记录不同级别的日志:
logger.debug(message)
: 记录 DEBUG 级别的日志。logger.info(message)
: 记录 INFO 级别的日志。logger.warning(message)
: 记录 WARNING 级别的日志。logger.error(message)
: 记录 ERROR 级别的日志。logger.critical(message)
: 记录 CRITICAL 级别的日志。
示例:
import logging
logger = logging.getLogger(__name__)
logger.warning('磁盘空间不足!')
logger.info('程序已成功处理 1000 条数据')
在默认情况下,日志消息会被打印到控制台。
记录日志到文件
要将日志记录到文件,可以使用 basicConfig()
函数配置日志系统,并指定 filename
参数:
import logging
logging.basicConfig(filename='example.log', level=logging.DEBUG)
logger = logging.getLogger(__name__)
logger.debug('这是一个 DEBUG 级别的日志')
logger.info('这是一个 INFO 级别的日志')
这会将所有级别为 DEBUG 及以上的日志消息写入到名为 example.log
的文件中。
在消息中显示日期/时间
可以通过在 basicConfig()
函数中设置 format
参数来自定义日志消息的格式。例如,要显示日期/时间信息,可以使用以下代码:
import logging
logging.basicConfig(
filename='example.log',
level=logging.DEBUG,
format='%(asctime)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)
logger.debug('这是一个 DEBUG 级别的日志')
这会在每个日志消息前添加日期/时间信息。
完整示例
import logging
# 配置日志系统
logging.basicConfig(
filename='app.log',
level=logging.DEBUG,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
# 获取记录器
logger = logging.getLogger(__name__)
# 示例日志记录
logger.debug('程序开始运行')
try:
# 模拟程序逻辑
result = 10 / 0
except ZeroDivisionError as e:
logger.exception('发生错误: %s', e)
else:
logger.info('计算结果: %s', result)
logger.debug('程序运行结束')
该示例代码演示了如何配置日志系统、记录不同级别的日志消息以及处理异常。程序运行后,会在 app.log
文件中生成以下日志记录:
2023-10-27 10:00:00 - __main__ - DEBUG - 程序开始运行
2023-10-27 10:00:00 - __main__ - ERROR - 发生错误: division by zero
Traceback (most recent call last):
File "example.py", line 12, in <module>
result = 10 / 0
ZeroDivisionError: division by zero
2023-10-27 10:00:00 - __main__ - DEBUG - 程序运行结束