1

如何在 Django 中配置日志记录以默认使用 Sentry 来处理所有WARNING和更高级别的消息,但是当我运行管理命令时将其降低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',
        },
    },
4

2 回答 2

0

您可以对管理命令使用不同的设置./manage.py my_task --settings=proj.settings.management,对吗?因此,您可以覆盖日志记录部分并从原始设置文件中“继承”其余部分...或者我是否遗漏了您的问题的某些要点?

于 2013-10-09T11:08:55.067 回答
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 工作者时添加记录器,但我认为守护进程没有标准输出,所以没关系?

于 2012-08-31T12:30:14.760 回答