logging日志配置文件管理与生产环境最佳实践
请说明如何使用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文件读取配置,适合传统项目。
生产环境最佳实践:
- 使用
RotatingFileHandler或TimedRotatingFileHandler避免日志无限增长 - 结构化日志:使用JSON格式(
python-json-logger),便于日志分析系统(ELK/Loki)解析 - 异步日志:避免I/O阻塞主线程,使用
QueueHandler+QueueListener - 敏感信息脱敏:自定义Filter过滤密码、Token
- 分布式追踪:结合
contextvars或logging.LoggerAdapter注入Request ID