【问题标题】:Django logging hiding errorsDjango 记录隐藏错误
【发布时间】:2015-05-01 20:36:39
【问题描述】:

如何让 logging.error(msg) 在 Django 应用程序中显示错误消息?

在 Django 中经常推荐使用 Python 的 logging 模块来处理日志输出,但我发现它非常麻烦和复杂,而且很容易完全禁用所有输出。

在我的 Django 设置中,我有以下日志设置:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'mail_admins': {
            'level': 'ERROR',
            'class': 'django.utils.log.AdminEmailHandler'
        }
    },
    'loggers': {
        'django.request': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': True,
        },
    }
}

在管理命令中,我将记录器称为:

import logging
LOG = logging.getLogger(__name__)
LOG.error('some error happened!')

但我从未在控制台中看到这些错误,即使在启用了调试的本地开发服务器上也是如此。我做错了什么?

【问题讨论】:

    标签: python django logging


    【解决方案1】:

    您可能看不到日志输出,因为您没有为脚本中的 __name__ 安装记录器。

    解释一下:

    'loggers': {
        'django.request': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': True,
        },
    }
    

    告诉日志框架安装一个名称为'django.request'的记录器。因此,只有记录到 'django.request' 的消息才会产生任何输出,即如果 -- 在您的示例代码中 -- __name__ 不是 'django.request',您将不会得到任何输出。

    你可能想要的是root logger

    '': {
        'handlers': ['mail_admins'],
        'level': 'ERROR',
        'propagate': True, # this tells logger to send logging message
                            # to its parent (will send if set to True)
    }
    

    可以为不同的(django 和非 django)模块安装额外的记录器。

    【讨论】:

    猜你喜欢
    • 2011-02-28
    • 1970-01-01
    • 2019-04-11
    • 1970-01-01
    • 2011-07-02
    • 2011-01-08
    • 1970-01-01
    • 2021-09-08
    相关资源
    最近更新 更多