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.requestlogger记录的500错误不会触发邮件告警,错误会直接通过调试页面展示,不会走正式环境的告警通道。需确保部署生产环境时将DEBUG设置为False。 - 核对日志配置的作用范围
你当前的日志配置仅单独绑定了django.requestlogger,若项目存在其他全局日志规则覆盖该行为,会导致处理器不生效。可补充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环境,手动调用日志接口验证处理器连通性:
若执行后未收到邮件,可查看Django运行日志中的报错信息,定位SMTP投递过程中的异常。import logging test_logger = logging.getLogger('django.request') test_logger.error("测试告警邮件发送", exc_info=True)
内容的提问来源于stack exchange,提问作者Jason Howard
相关产品推荐
相关产品推荐

