You need to enable JavaScript to run this app. Django 3.x配置日志告警后 触发500错误时未发送邮件(邮件配置正常)
优惠活动
大模型
产品
解决方案
定价
更多

Django 3.x配置日志告警后 触发500错误时未发送邮件(邮件配置正常)

Django 3.x 500错误不触发管理员告警邮件的排查方向

按问题出现概率从高到低,可依次核对以下配置:

  • 检查ADMINS配置是否缺失
    django.utils.log.AdminEmailHandler会将ERROR级别日志发送给ADMINS列表定义的收件人,该配置不存在时,即使邮件服务正常、日志处理器绑定正确,也没有投递目标,无法发出告警邮件。正确配置示例:
    ADMINS = [
        ("站点管理员", "admin@your-domain.com"),
    ]
    
  • 检查生产环境的DEBUG参数状态
    Django 3.x框架默认逻辑:当DEBUG = True时,django.request logger记录的500错误不会触发邮件告警,错误会直接通过调试页面展示,不会走正式环境的告警通道。需确保部署生产环境时将DEBUG设置为False。
  • 核对日志配置的作用范围
    你当前的日志配置仅单独绑定了django.request logger,若项目存在其他全局日志规则覆盖该行为,会导致处理器不生效。可补充root logger的绑定逻辑做验证:
    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'handlers': {
            'mail_admins': {
                'level': 'ERROR',
                'class': 'django.utils.log.AdminEmailHandler'                
            },
        },
        # 补充全局root配置,确保ERROR级别日志可被捕获
        'root': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
        },
        'loggers': {
            'django.request': {
                'handlers': ['mail_admins'],
                'level': 'ERROR',
                'propagate': False,
            },
        }
    }
    
  • 手动验证告警触发流程
    进入项目Django Shell环境,手动调用日志接口验证处理器连通性:
    import logging
    test_logger = logging.getLogger('django.request')
    test_logger.error("测试告警邮件发送", exc_info=True)
    
    若执行后未收到邮件,可查看Django运行日志中的报错信息,定位SMTP投递过程中的异常。

内容的提问来源于stack exchange,提问作者Jason Howard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.29 13:36:07