如何在Django中配置日志记录,默认情况下为所有WARNING
及更高版本的消息使用Sentry,但是当我运行管理命令时将其降低到INFO
并添加控制台记录器?
在正常操作中(通过mod_python或uWSGI运行网站),我只关心WARNING
及更高版本。但是,我们有一些管理命令,我们通过cronjobs运行,我想在日志文件中收集他们的INFO
消息(在管理命令中,但也在更深的代码中)。一些管理命令来自外部库,我宁愿不更改它们(在那里添加额外的初始化)。理想情况下,我想在设置模块中检测我们是通过manage.py
还是通过WSGI运行。
我当前LOGGING
字典的相关部分:
'root': {
'level': 'WARNING',
'handlers': ['sentry'],
},
'handlers': {
'console': {
'level': 'INFO',
'class': 'logging.StreamHandler',
}.
'sentry': {
'level': 'WARNING',
'class': 'raven.contrib.django.handlers.SentryHandler',
},
},
答案 0 :(得分:0)
非常简洁的方法:修改manage.py
以在环境中添加内容,并在设置模块中检测到这一点。
在manage.py
:
import os
os.environ['DJANGO_IS_MANAGEMENT_COMMAND'] = '1'
在设置模块中:
if os.environ.get('DJANGO_IS_MANAGEMENT_COMMAND', False):
LOGGING['root']['level'] = 'INFO'
LOGGING['root']['handlers'].append('console')
这也会在运行Celery worker时添加记录器,但我认为守护进程没有stdout,所以没关系?
答案 1 :(得分:0)
您可以对管理命令./manage.py my_task --settings=proj.settings.management
使用不同的设置,对吗?因此,您可以覆盖日志记录部分并从原始设置文件中“继承”其余内容......或者我在您的问题中遗漏了一些内容?