管理命令的单独日志记录

时间:2012-08-31 12:30:15

标签: python django logging django-manage.py

如何在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',
        },
    },

2 个答案:

答案 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使用不同的设置,对吗?因此,您可以覆盖日志记录部分并从原始设置文件中“继承”其余内容......或者我在您的问题中遗漏了一些内容?

相关问题