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

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

image.png

参考教程

  1. 将DEBUG改为False

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

    # 被通知的用户,例如这样
    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

    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中

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