Skip to main content
 首页 » 编程设计

python之升级到 Django 2.1 后不再发送 500 错误消息

2024年12月31日22jirigala

自从我将网站升级到 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 中的已知错误

请您参考如下方法:

我根据这个 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'。我也尝试将这些设置手动应用到先前的配置,但它仍然不起作用。