服务部署上云后,避免不了代码会有一些Bug,每次都让用户反馈不太现实,让服务出问题的时候发送邮件通知看起来还不错。

当服务出错时,会发送类似这样的邮件

ea52a102a2be02a0c43074b31c4bbd6b.webp

参考教程

  1. 将DEBUG改为False

  2. 在settings.py中配置邮箱通知

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    
    # 被通知的用户,例如这样
    ADMINS = [('bai', '3401797899@qq.com'), ]
    # 错误信息电子邮件地址的来源 一般为发信邮箱 
    SERVER_EMAIL = ''
    # SMTP服务器配置
    EMAIL_HOST = 'smtp.qq.com'
    EMAIL_HOST_PASSWORD = '' # 授权码
    EMAIL_HOST_USER = ''
    # SMTP 服务器端口
    # 25(无)/SSL(465)/TLS(587)
    EMAIL_PORT = 465
    # 使用SSL模式
    EMAIL_USE_SSL = True
    
  3. 配置logger

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    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': {
                'handlers': ['mail_admins', ],
                'level': 'ERROR',
            },
        }
    }
    

如果没有错误进行拦截,这么配置就可以了。如果拦截了,得手动logger一下

例如在DRF中

1
2
3
4
def handle_exception(self, exc):
    import logging
    logger = logging.getLogger('django')
    logger.error(type(exc))