CodeWalk

logging日志配置文件管理与生产环境最佳实践

作者:编译有声 · 2026-05-30 12:55

请说明如何使用logging.config.dictConfig()和fileConfig()管理日志配置,并给出生产环境日志的最佳实践。

回答

编译有声

dictConfig配置(推荐):

import logging.config

LOGGING_CONFIG = {
    'version': 1,
    'formatters': {
        'standard': {
            'format': '%(asctime)s [%(levelname)s] %(name)s: %(message)s'
        },
    },
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
            'formatter': 'standard',
            'level': 'INFO',
        },
        'file': {
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': 'app.log',
            'maxBytes': 10485760,  # 10MB
            'backupCount': 5,
            'formatter': 'standard',
        },
    },
    'loggers': {
        'myapp': {
            'handlers': ['console', 'file'],
            'level': 'DEBUG',
        },
    },
    'root': {
        'handlers': ['console'],
        'level': 'WARNING',
    },
}
logging.config.dictConfig(LOGGING_CONFIG)

fileConfig:从logging.conf文件读取配置,适合传统项目。

生产环境最佳实践

  1. 使用RotatingFileHandlerTimedRotatingFileHandler避免日志无限增长
  2. 结构化日志:使用JSON格式(python-json-logger),便于日志分析系统(ELK/Loki)解析
  3. 异步日志:避免I/O阻塞主线程,使用QueueHandler + QueueListener
  4. 敏感信息脱敏:自定义Filter过滤密码、Token
  5. 分布式追踪:结合contextvarslogging.LoggerAdapter注入Request ID