話不多說色罚,直入正題。
先上圖账劲,看一下監(jiān)控的效果戳护。
如下是監(jiān)控我們網(wǎng)站系統(tǒng)錯(cuò)誤的郵件。包含了請(qǐng)求的url地址瀑焦,以及詳細(xì)的異常信息腌且。
一、監(jiān)控所有的request請(qǐng)求
如何實(shí)現(xiàn)系統(tǒng)監(jiān)控榛瓮,自動(dòng)發(fā)送錯(cuò)誤日志的郵件呢铺董?
只需配置配置settings文件即可。
1.設(shè)置發(fā)送郵件配置信息
郵件會(huì)發(fā)送到ADMINS設(shè)定的郵件列表中禀晓。
SERVER_EMAIL ='sender@qq.com'
DEFAULT_FROM_EMAIL ='sender@qq.com'
ADMINS = (('receiver','receiver@qq.com'),)
EMAIL_HOST ='smtp.exmail.qq.com'
EMAIL_HOST_USER ='sender@qq.com'
EMAIL_HOST_PASSWORD ='123456'
EMAIL_BACKEND ='django.core.mail.backends.smtp.EmailBackend'
2.配置LOGGING
1)配置mail_admin的handler
level為日志級(jí)別
django.utils.log.AdminEmailHandler為django處理系統(tǒng)日志發(fā)送郵件的handler
在沒有配置filter參數(shù)情況下精续,默認(rèn)發(fā)送系統(tǒng)5XX狀態(tài)的錯(cuò)誤日志
'handlers': {
? ? 'mail_admin': {
? ? 'level':'ERROR',
? ? 'class':'django.utils.log.AdminEmailHandler',
? ? 'include_html':False,
? ? }
}
2)配置django.request模塊的logger
將django的request模塊配置如上的mail_admin handler
'loggers': {
? ? 'django.request': {
? ? 'handlers': ['default','mail_admin'],
? ? 'propagate':True,
? ? 'level':'ERROR',
? ? },
}
二、監(jiān)控非request請(qǐng)求
如何監(jiān)控例如系統(tǒng)的定時(shí)任務(wù)等非用戶發(fā)起的功能模塊粹懒,我們可以自定義一個(gè)decorator來解決這個(gè)問題重付。
utils.send_exception_email(email_list,title,exc)為發(fā)送郵件的方法,可以自己實(shí)現(xiàn)凫乖,非常簡(jiǎn)單
def decorator_error_monitor(title):
? ? def wrap(f):
? ? ? ? def wrapped_f(*args,**kwargs):
? ? ? ? ? ? try:
? ? ? ? ? ? ? ? result = f(*args,**kwargs)
? ? ? ? ? ? ? ? return result
? ? ? ? ? ?except:
? ? ? ? ? ? ? ?exc = traceback.format_exc()
? ? ? ? ? ? ? ?utils.send_exception_email(email_list,title,exc)
? ? ? ? ? ? ? ?raise Exception(exc)
? ? ? ? ? ? return wrapped_f
? ? ? ? return wrap
對(duì)需要監(jiān)控的方法使用decorator
@decorator_error_monitor("清算錯(cuò)誤")
def do_settlement(users):
? ? for user in users:
? ? ? ? process_settlement_for_one_user(user)
監(jiān)控效果如下圖所示:
小結(jié)
以上監(jiān)控方法确垫,簡(jiǎn)單實(shí)用,無(wú)需開發(fā)額外的日志監(jiān)控系統(tǒng)帽芽,可以在第一時(shí)間發(fā)現(xiàn)系統(tǒng)的問題删掀,并得知系統(tǒng)的錯(cuò)誤日志,幫助快速的定位問題导街。