【问题标题】:After Upgrade to Django 2.1 500 error messages are not sent anymore升级到 Django 2.1 500 错误消息后不再发送
【发布时间】:2018-11-13 06:32:26
【问题描述】:

自从我将网站升级到 Django 2.1 后,不再发送带有 500 信息的错误电子邮件。

无论如何我都没有更改设置。

它们看起来像这样(摘自 diffsettings)

SERVER_EMAIL = 'bla@example.com'
### LOGGING = {}
### LOGGING_CONFIG = 'logging.config.dictConfig'
ADMINS = [('Admin', 'admin@example.com')]
### DEBUG = False

如您所见,我有默认的日志记录配置,并且调试设置为 false。 我还测试了我的电子邮件设置,当我手动发送电子邮件时(将服务器电子邮件地址作为发件人,将管理员电子邮件地址作为收件人,一切正常。 我没有发现这是 Django 2.1 中的一个已知错误

【问题讨论】:

    标签: python django


    【解决方案1】:

    我根据此gist 向 Google Chat 发送消息。自从升级到 Django 2.1 后,即使配置保持不变(很像你的情况),它也停止了工作。虽然我不完全确定发生了什么,但我发现如果我将服务器的 DEBUG 更改为 True 并将我的“chat_admins”日志处理程序上的过滤器更改为“require_debug_true”,它会再次工作。当然,这并不理想,因为它在生产环境中,其中 DEBUG 为 'False',我需要它来工作。

    我最终在 settings.py 中重写了我的 LOGGING 变量,试图获得最小的配置并遵循Django Logging 的文档。它现在正在生产中使用 DEBUG 为“True”。

    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'formatters': {
            'django.server': {
                '()': 'django.utils.log.ServerFormatter',
                'format': '[{server_time}] {message}',
                'style': '{',
            },
        },
        'filters': {
            'require_debug_true': {
                '()': 'django.utils.log.RequireDebugTrue',
            },
            'require_debug_false': {
                '()': 'django.utils.log.RequireDebugFalse',
            },
        },
         'handlers': {
            'console': {
                'level': 'INFO',
                'filters': ['require_debug_true'],
                'class': 'logging.StreamHandler',
            },
            'django.server': {
                'level': 'INFO',
                'class': 'logging.StreamHandler',
                'formatter': 'django.server',
            },
            'chat_admins': {
                'level': 'DEBUG',
                'filters': ['require_debug_false'],
                'class': 'myapp.chat_logger.ChatExceptionHandler',
            },
        },
        'loggers': {
            'django': {
                'handlers': ['console', 'chat_admins'],
                'level': 'INFO',
                'propagate': True,
            },
            'django.server': {
                'handlers': ['django.server'],
                'level': 'INFO',
                'propagate': False,
            },
        },
    }
    

    原始设置和我的重写之间只有两个主要区别:1) 'mail_admins' 处理程序消失了,2) django 记录器中的'propagate' 现在设置为'True'。我也尝试手动将这些设置应用于先前的配置,但仍然无法正常工作。

    【讨论】:

    • 与 OP 的问题无关,而是与@chase.tb 相关——我从 1.11 升级到 Django 2.1,但没有意识到 ADMINS 设置从元组的元组更改为元组的列表。修复后,电子邮件再次工作。
    • 这个特定的 Django 项目是使用 v2.0 启动的,其中 ADMINS 设置已被视为元组列表。
    猜你喜欢
    • 2019-11-14
    • 2015-08-29
    • 2016-03-09
    • 2017-01-01
    • 2019-04-13
    • 1970-01-01
    • 2016-06-24
    • 2018-03-11
    相关资源
    最近更新 更多