首页 > 解决方案 > 为什么升级到 v2.2 后 Django 会发送重复的错误消息?

问题描述

Django 2.2从 version升级到后1.8,我的应用开始收到重复的错误消息。每个错误,无论类型如何,现在都会发送到我的ADMINS电子邮件两次。

我正在运行我的应用程序Heroku并尝试了他们的支持,但他们确定这与我的应用程序有关。我一直无法在网上或上找到类似的问题stackoverflow

我的日志配置

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

更新

我能够在我的本地服务器上复制它,并注意到当我在设置中'propagate': True,更改为时,双重电子邮件停止了。从文档Falseloggers

这种传播可以在每个记录器的基础上进行控制。如果您不希望特定记录器传播到其父级,则可以关闭此行为。

但是,我仍然不确定我的最佳解决方案应该是什么。我担心设置传播到False不会解决根本原因。

标签: pythondjangopython-3.xerror-handling

解决方案


感谢@gregory 将建议包含LOGGING_CONFIG = None在我的设置中。根据文档

这将禁用 Django 的默认日志记录的配置过程。

最终工作代码:

import logging.config

LOGGING_CONFIG = None

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

logging.config.dictConfig(LOGGING)

推荐阅读