django错误日志自动发送邮件报警

简介

线上发送错误时需要及时的去发现,这里有很多种方式比如ELK可以用来收集日志,针对ERROR级别进行报警。
这里我们使用django框架自带的错误日志发送邮件。

配置邮件

1
2
3
4
5
6
7
8
9
10
11
12
ADMINS = (
('admin', 'admin@admin.com'),
)
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.exmail.qq.com'
EMAIL_PORT = 465
EMAIL_HOST_USER = 'admin@admin.com'
EMAIL_HOST_PASSWORD = 'password'
EMAIL_USE_SSL = True
EMAIL_SUBJECT_PREFIX = '[django] '
EMAIL_TIMEOUT = 3
DEFAULT_FROM_EMAIL = SERVER_EMAIL = EMAIL_HOST_USER

SERVER_EMAIL 是发生到adminsmanagers的邮件发送者,如果不配置默认为root@localhost

配置LOGGING

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'request_id': { # 自定义的filter
'()': 'log_request_id.filters.RequestIDFilter'
},
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse',
}
},
'formatters': {
'standard': {
'format': '%(levelname)s [%(asctime)s] [%(request_id)s] %(filename)s-%(funcName)s-%(lineno)s: %(message)s' # 这里使用filter request_id里的request_id字段
},
'default': {
'format': '%(levelname)s [%(asctime)s] %(name)s: %(message)s'
},
},
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'filters': ['request_id'], # 这里使用上面的filter: request_id
'formatter': 'standard', # 这里使用上面的formatter: standard
},
'file': { # 记录到日志文件(需要创建对应的目录,否则会出错)
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(BASE_DIR, 'debug.log'), # 日志输出文件
'maxBytes': 1024*1024*5, # 文件大小
'backupCount': 5, # 备份份数
'formatter': 'default', # 使用哪种formatters日志格式
},
'mail_admins': {
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler',
'filters': ['require_debug_false'],
'include_html': True,
}
},
'loggers': {
'django': {
'handlers': ['file'], # 这里使用上面的handler: console
'level': 'INFO',
'propagate': True,
},
'django.request': {
'handlers': ['file', 'mail_admins'],
'level': 'INFO',
'propagate': False
},
'project.app': {
'handlers': ['file', 'mail_admins'],
'level': 'INFO',
'propagate': True
}
}
}

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器