在 Python 里,logging
模块是一个强大且灵活的日志记录工具,它能帮助你在程序运行时记录不同级别的信息,方便调试、监控和问题排查。下面为你详细介绍 logging
模块的基本使用方法。
1. 基本使用
以下是一个简单的示例,展示了如何使用 logging
模块记录日志:
import logging# 配置日志记录
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')# 记录不同级别的日志
logging.debug('这是一条调试信息')
logging.info('这是一条普通信息')
logging.warning('这是一条警告信息')
logging.error('这是一条错误信息')
logging.critical('这是一条严重错误信息')
代码解释
import logging
:导入logging
模块。logging.basicConfig()
:对日志记录进行配置。level=logging.DEBUG
表示将日志级别设置为DEBUG
,这意味着所有级别(DEBUG
、INFO
、WARNING
、ERROR
、CRITICAL
)的日志都会被记录;format='%(asctime)s - %(levelname)s - %(message)s'
定义了日志的输出格式,包含时间、日志级别和日志信息。logging.debug()
、logging.info()
等:用于记录不同级别的日志。
2. 日志级别
logging
模块定义了 5 个日志级别,从低到高分别为:
DEBUG
:用于详细的调试信息,通常在开发和调试阶段使用。INFO
:用于记录程序运行过程中的普通信息,如程序启动、完成某个任务等。WARNING
:用于记录可能会导致问题的情况,但程序仍然可以继续运行。ERROR
:用于记录程序运行过程中出现的错误,但不影响程序的整体运行。CRITICAL
:用于记录严重的错误,可能会导致程序无法继续运行。
3. 日志输出到文件
除了将日志输出到控制台,还可以将日志输出到文件中。示例如下:
import logging# 配置日志记录到文件
logging.basicConfig(filename='app.log', level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')# 记录日志
logging.debug('这是一条调试信息,将被记录到文件中')
代码解释
filename='app.log'
:指定日志文件的名称为app.log
。
4. 自定义日志记录器
除了使用默认的日志记录器,还可以创建自定义的日志记录器。示例如下:
import logging# 创建自定义日志记录器
logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)# 创建文件处理器
file_handler = logging.FileHandler('custom.log')
file_handler.setLevel(logging.DEBUG)# 创建控制台处理器
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO)# 定义日志格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
console_handler.setFormatter(formatter)# 将处理器添加到日志记录器
logger.addHandler(file_handler)
logger.addHandler(console_handler)# 记录日志
logger.debug('这是自定义日志记录器的调试信息')
logger.info('这是自定义日志记录器的普通信息')
代码解释
logging.getLogger('my_logger')
:创建一个名为my_logger
的自定义日志记录器。logging.FileHandler('custom.log')
:创建一个文件处理器,将日志记录到custom.log
文件中。logging.StreamHandler()
:创建一个控制台处理器,将日志输出到控制台。logger.addHandler()
:将处理器添加到日志记录器中。
5. 异常处理中的日志记录
在异常处理中使用日志记录可以帮助你更好地排查问题。示例如下:
import logging# 配置日志记录
logging.basicConfig(level=logging.ERROR, format='%(asctime)s - %(levelname)s - %(message)s')try:result = 1 / 0
except ZeroDivisionError as e:logging.error('发生除零错误', exc_info=True)
代码解释
exc_info=True
:在日志中记录异常的详细信息,包括异常类型和堆栈跟踪。
通过以上介绍,你可以掌握 logging
模块的基本使用方法,根据实际需求灵活配置日志记录。