生产环境下如何配置Django同时记录INFO与ERROR级别日志?
解决方案
没问题,我来帮你调整这个日志配置,让project级别同时记录INFO和ERROR日志。你只需要修改loggers里project项的日志级别即可,具体调整如下:
修改后的完整LOGGING配置:
LOGGING = { 'version': 1, 'disable_existing_loggers': True, 'root': { 'level': 'WARNING', 'handlers': ['console', ], }, 'formatters': { 'verbose': { 'format': '%(levelname)s %(asctime)s %(module)s ' '%(process)d %(thread)d %(message)s' }, }, 'handlers': { 'console': { 'level': 'DEBUG', 'class': 'logging.StreamHandler', 'formatter': 'verbose' }, 'sns': { 'level': 'ERROR', 'class': 'project.abc.snshandler.SNSHandler', 'formatter': 'verbose' } }, 'loggers': { 'django.db.backends': { 'level': 'ERROR', 'handlers': ['console', ], 'propagate': False, }, 'django.security.DisallowedHost': { 'level': 'ERROR', 'handlers': ['console', ], 'propagate': False, }, 'project': { 'level': 'INFO', # 这里从ERROR改成INFO 'handlers': ['console', 'sns'], 'propagate': False, }, }, }
调整说明:
- 修改
projectlogger的级别为INFO:这个设置会让project下的所有日志都捕获INFO及以上级别的日志(包括INFO、WARNING、ERROR、CRITICAL)。 - 现有handler的配置无需改动:
consolehandler的级别是DEBUG,会接收所有高于等于DEBUG的日志,自然包含INFO和ERROR;snshandler保持ERROR级别,只会接收ERROR及以上的日志,这样ERROR日志会同时输出到console和SNS,而INFO日志只会输出到console,完全符合你的需求。
另外,propagate: False的设置确保project的日志不会向上传递到root logger,避免重复输出日志。
内容的提问来源于stack exchange,提问作者Wagh
相关产品推荐
相关产品推荐

