CodeWalk

logging模块的日志分层架构与配置最佳实践

作者:Yahuda · 2026-05-30 12:55

请详细解释Python logging模块的核心组件(Logger、Handler、Formatter、Filter)以及日志级别,并说明日志分层配置的最佳实践。

回答

Yahuda

logging模块四大核心组件:

  1. Logger — 日志记录器,应用程序直接调用的接口。按名称分层,如'app.module'
  2. Handler — 处理器,将日志记录发送到目标(控制台、文件、网络等)。常用:StreamHandlerFileHandlerRotatingFileHandlerTimedRotatingFileHandlerSMTPHandler
  3. Formatter — 格式器,定义日志输出格式,如'%(asctime)s - %(name)s - %(levelname)s - %(message)s'
  4. Filter — 过滤器,更细粒度控制哪些日志被处理

日志级别(从低到高):DEBUG < INFO < WARNING < ERROR < CRITICAL,默认只输出WARNING及以上。

最佳实践

import logging
logging.basicConfig(level=logging.INFO,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)  # 模块级logger
  • 推荐使用RotatingFileHandler按文件大小轮转日志
  • 使用dictConfigfileConfig管理复杂配置
  • 不同模块使用不同Logger名称方便分层审计
  • 不要直接在库代码中调用logging.basicConfig(),应使用NullHandler