最近在为公司开发企业级Django监控平台时,踩了一个关于日志收集的坑。项目使用Django 4.0+,需要集成ELK栈进行日志监控。
问题描述: 按照官方文档配置了django-structlog后,发现生产环境日志无法正常写入。通过排查发现,由于设置了LOGGING_CONFIG=None,导致自定义的structlog配置被忽略。
复现步骤:
- 在settings.py中添加:
LOGGING_CONFIG = None
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'file': {
'level': 'INFO',
'class': 'logging.FileHandler',
'filename': '/var/log/django/app.log',
},
},
'loggers': {
'django': {
'handlers': ['file'],
'level': 'INFO',
},
},
}
- 启动项目后发现日志未写入
解决方案: 将LOGGING_CONFIG = None注释掉,让Django使用默认配置。或者正确配置structlog的配置文件。
这个坑在开发环境可能不会暴露,但在生产环境中会带来严重问题。建议企业级项目必须做好日志监控配置。

讨论