2026-10-23 09:13:27
在Python应用程序开发中,日志记录是追踪问题、监控状态和记录关键事件的核心工具。Python内置的logging模块提供了强大且灵活的日志功能,以下从基础到进阶的实践指南,助你打造优雅的日志系统。
1. 日志基础配置通过basicConfig()快速设置日志级别和输出目标(如文件或控制台):
import logginglogging.basicConfig( filename='app.log', # 输出到文件 level=logging.INFO, # 记录INFO及以上级别 format='%(asctime)s - %(levelname)s - %(message)s' # 自定义格式)logging.debug('调试信息') # 不会记录(级别低于INFO)logging.info('普通信息') # 记录到文件logging.error('错误信息') # 记录到文件关键点:
自定义记录器(Logger)和处理器(Handler),实现多目标输出和格式化:
import logginglogger = logging.getLogger('my_app')logger.setLevel(logging.DEBUG) # 设置记录器级别# 文件处理器(记录到文件)file_handler = logging.FileHandler('app.log')# 控制台处理器(输出到终端)console_handler = logging.StreamHandler()# 统一格式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.info('这条信息会同时输出到文件和控制台')优势:
通过级别和过滤器精准控制日志内容:
import logginglogger = logging.getLogger('filtered_logger')logger.setLevel(logging.DEBUG)# 自定义过滤器:仅记录WARNING及以上级别class WarningFilter(logging.Filter): def filter(self, record): return record.levelno >= logging.WARNINGlogger.addFilter(WarningFilter())logger.debug('调试信息') # 被过滤logger.warning('警告信息') # 记录logger.error('错误信息') # 记录应用场景:
记录异常堆栈信息,辅助调试:
import loggingtry: 1 / 0except Exception as e: logging.error('计算错误', exc_info=True) # 自动记录堆栈 # 或显式传递异常对象 # logging.error('计算错误', exc_info=e)输出示例:
ERROR:root:计算错误Traceback (most recent call last): File "<stdin>", line 2, in <module>ZeroDivisionError: division by zero5. 日志文件旋转使用RotatingFileHandler限制日志文件大小并自动备份:
from logging.handlers import RotatingFileHandlerhandler = RotatingFileHandler( 'app.log', maxBytes=5*1024*1024, # 每个文件最大5MB backupCount=3 # 保留3个备份)logger.addHandler(handler)for i in range(10000): logger.info(f'这是一条测试日志 {i}')效果:
Python的logging模块通过灵活的配置(记录器、处理器、过滤器、格式化)支持从简单到复杂的日志需求。合理利用日志级别、异常追踪和文件旋转,可以显著提升应用的可维护性。结合实际场景选择配置方式,让日志成为调试和监控的得力助手。