返回

一键搞定!Python日志记录指南,让Bug无处可藏!

后端

Python 日志记录入门

导航

1. Python 日志记录入门

在 Python 中,日志记录模块使您可以轻松记录和分析应用程序日志信息。它提供了多种功能,包括日志级别、日志格式化、过滤器和处理器,帮助您创建定制的日志记录解决方案。

2. 配置日志记录

配置日志记录的第一步是调用 logging.basicConfig() 函数。它允许您指定日志文件名称、日志级别、日志格式、日期格式和日志样式。

import logging

# 配置日志记录
logging.basicConfig(filename="mylog.log", level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s")

3. 选择合适的日志级别

日志级别用于控制要记录的日志信息的详细程度。logging 模块提供五个日志级别:

  • DEBUG: 记录所有日志信息,包括调试信息。
  • INFO: 记录一般信息,例如程序的运行状态。
  • WARNING: 记录警告信息,例如潜在的错误。
  • ERROR: 记录错误信息。
  • CRITICAL: 记录严重错误信息。

4. 自定义日志格式

您可以使用 logging.Formatter 类自定义日志输出的格式。它允许您使用占位符来格式化日志信息,例如 %(name)s(日志记录器的名称)、%(levelname)s(日志级别)和 %(message)s(日志信息)。

# 自定义日志格式
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")

# 将格式化程序添加到日志记录器
logging.getLogger().addHandler(logging.StreamHandler())
logging.getLogger().addHandler(logging.FileHandler("mylog.log"))
logging.getLogger().setLevel(logging.INFO)

5. 使用过滤器和处理器

5.1 过滤器

过滤器可让您根据日志级别、模块名称等条件过滤掉不需要的日志信息。

# 创建一个过滤日志记录的过滤器
filter = logging.Filter()
filter.filter = lambda record: record.levelno == logging.WARNING

# 添加过滤器到日志记录器
logging.getLogger().addFilter(filter)

5.2 处理器

处理器用于将日志信息输出到不同的目标,例如终端、文件或电子邮件。

# 创建一个将日志信息输出到终端的处理器
handler = logging.StreamHandler()

# 创建一个将日志信息输出到文件的处理器
handler = logging.FileHandler("mylog.log")

# 添加处理器到日志记录器
logging.getLogger().addHandler(handler)

6. 建议

  • 使用 logging.basicConfig() 函数配置日志记录。
  • 根据应用程序的需要选择合适的日志级别。
  • 自定义日志格式以满足您的特定需求。
  • 使用过滤器和处理器定制日志输出。
  • 定期检查日志文件以识别和解决问题。

7. 常见问题解答

问:如何记录一条 INFO 级别的日志消息?

答: 使用 logging.info() 函数,例如:

logging.info("这是一条 INFO 级别的日志消息")

问:如何过滤掉 DEBUG 级别的日志消息?

答: 创建并添加到日志记录器的过滤器,例如:

filter = logging.Filter()
filter.filter = lambda record: record.levelno != logging.DEBUG
logging.getLogger().addFilter(filter)

问:如何将日志信息输出到多个目标?

答: 向日志记录器添加多个处理器,例如:

handler1 = logging.StreamHandler()
handler2 = logging.FileHandler("mylog.log")
logging.getLogger().addHandler(handler1)
logging.getLogger().addHandler(handler2)

问:如何使用 SMTPHandler 将日志信息发送到电子邮件?

答: 配置 logging.SMTPHandler 并将其添加到日志记录器,例如:

handler = logging.SMTPHandler("smtp.gmail.com", 587, "myemail@gmail.com", "password", "myreceiver@gmail.com", "Subject: Log Message")
logging.getLogger().addHandler(handler)

问:如何获取当前的日志级别?

答: 使用 logging.getLogger().level,例如:

current_level = logging.getLogger().level