详解 Python logging 日志模块
简介
Python logging 模块是一个强大且灵活的记录日志的模块,它允许你在你的 Python 应用程序中执行大规模的日志记录,并在日志消息的不同级别中进行分类和过滤。使用 Python logging 模块可以有效地记录调试信息、错误和异常信息、警告、信息等。
Python logging 模块支持以下功能:
- 不同日志级别的过滤和记录
- 可定制的格式化输出日志
- 可配置记日志到文件或网络服务器
- 可在代码中不同位置处理日志
在使用 Python logging 模块时,需要先导入 logging
模块,然后进行相关配置。
import logging
logger = logging.getLogger(__name__)
日志级别
Python logging 模块提供了 5 种不同的日志级别。
级别 | 描述 |
---|---|
DEBUG | 详细的程序运行日志,通常用于调试和问题追踪 |
INFO | 普通的程序运行日志,记录应用程序运行时的常规事件 |
WARNING | 表示有可能的错误或不正常的情况,但不会导致应用程序失败 |
ERROR | 表示程序运行出现错误,通常会导致应用程序失败 |
CRITICAL | 表示重大错误,可以导致应用程序崩溃和无响应 |
在编写日志时需要确保选择了适当的日志级别,因为选择了过高的级别会产生大量无用信息,反之,则会遗漏重要信息。推荐的做法是只记录你关心的的级别或更高级别的日志信息。同时,调试时可以降低日志级别,用于辅助调试。
日志记录
使用 Python logging 模块,可以通过定义 Logger 对象在应用程序的不同位置记录日志信息。一个 Logger 对象可与应用程序的不同部分相对应,每个区域都有一个特定名称。Logger 对象可用于记录消息,并根据所定义的严重性级别过滤消息。
记录日志时可以使用 log
方法,该方法有几个参数,其中最重要的是日志级别和要记录的消息。例如:
logger.warning('This is a warning message')
默认情况下,日志只记录到控制台。如果要将日志记录到文件,则需要通过 FileHandler
对象设置。例如:
import logging
# 创建日志对象
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
# 创建日志处理器
file_handler = logging.FileHandler('app.log')
file_handler.setLevel(logging.INFO)
# 创建日志格式化对象
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
# 为日志对象添加日志处理器
logger.addHandler(file_handler)
# 记录日志
logger.info('This is an info message')
上述代码先创建了一个日志对象 logger,设置了日志级别为 INFO。然后,创建一个 FileHandler 对象,将日志级别设置为 INFO,并将格式化器对象 formatter 绑定到 FileHandler 对象上。接下来,为日志对象 logger 添加日志处理器 file_handler。最后,使用 logger.info() 记录日志信息,此时,日志信息被记录到了文件 app.log 中。
示例说明
以下示例说明了如何使用 Python logging 模块记录日志。
示例一:日志详细信息打印到控制台
import logging
# 创建日志对象
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
# 创建控制台处理器
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO)
# 创建日志格式化对象
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
console_handler.setFormatter(formatter)
# 为日志对象添加控制台处理器
logger.addHandler(console_handler)
# 记录日志
logger.info('This is an info message')
logger.warning('This is a warning message')
在此示例中,首先创建一个日志对象 logger
,定义了日志的级别为 INFO
。接下来,创建了一个控制台处理器 console_handler
,该处理器会将日志详细信息打印到控制台上。然后,创建了日志格式化对象 formatter
,并将其设置为控制台处理器的格式化对象。然后,将控制台处理器设置为日志对象的处理器。最后,使用日志对象 logger
记录了两条日志信息,一条 INFO
级别的信息和一条 WARNING
级别的信息。在控制台上输出该信息,记录如下:
2021-07-27 15:35:21,828 - __main__ - INFO - This is an info message
2021-07-27 15:35:21,828 - __main__ - WARNING - This is a warning message
在输出的日志信息中,分别包含了记录时间、日志记录器名称、日志级别和日志消息等信息。
示例二:日志详细信息记录到文件
import logging
# 创建日志对象
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
# 创建文件处理器
file_handler = logging.FileHandler('app.log')
file_handler.setLevel(logging.INFO)
# 创建日志格式化对象
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
# 为日志对象添加文件处理器
logger.addHandler(file_handler)
# 记录日志
logger.info('This is an info message')
logger.warning('This is a warning message')
在此示例中,首先创建一个日志对象 logger
,定义了日志的级别为 INFO
。接下来,创建了一个文件处理器 file_handler
,将日志详细信息记录到文件 app.log
中。然后,设置了日志格式化对象,将其绑定到文件处理器上。最后,将文件处理器设置为日志对象的处理器。最终,使用日志对象 logger
记录了两条日志信息,一条 INFO
级别的信息和一条 WARNING
级别的信息。在文件 app.log
中记录如下:
2021-07-27 15:35:21,828 - __main__ - INFO - This is an info message
2021-07-27 15:35:21,828 - __main__ - WARNING - This is a warning message
在输出的日志信息中,分别包含了记录时间、日志记录器名称、日志级别和日志消息等信息。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解 python logging日志模块 - Python技术站