Django日志模塊logging的配置詳解
前言
Django對(duì)于日志輸出的信息是很完善的,request的信息,setting配置,trackback的信息,一應(yīng)俱全,足夠我們調(diào)試了。但是在線上環(huán)境,如果讓用戶看到這些信息,是很不安全的(暴露代碼)。所以在線上我們要關(guān)閉Debug,但是又不能扔掉這些調(diào)試信息,這就要用到logging模塊。
logging模塊其實(shí)是Python的模塊,在Django中有很多本地化的支持。
理解Logger
首先要理解logging的工作,這里面主要有四個(gè)東西:格式器formatter,過濾器filter,處理器handler,日志實(shí)例logger。
處理流程
formatter logger ----> handler ----------------> files, emails filter
處理流程是這樣的。首先,在代碼中。我們拿到的是logger實(shí)例,通過這個(gè)實(shí)例來記錄信息。
# import the logging library import logging # Get an instance of a logger logger = logging.getLogger('django') def my_view(request, arg1, arg): ... if bad_mojo: # Log an error message logger.error('Something went wrong!')
然后,名字是django的這個(gè)logger就會(huì)把信息交給相應(yīng)的handler,handler把信息用formater和filter處理一下,提交log(保存到文件,數(shù)據(jù)庫,或者發(fā)送郵件)。
一般來說,handler可以是send_email,error_file等負(fù)責(zé)處理的方式,在logger中可以重復(fù)使用handler。例如我們的django處理器使用了send_email, error_file 這兩個(gè)處理器,request處理器使用error_file,info_file兩個(gè)處理器,logger和handler可以理解成多對(duì)多的關(guān)系,嘻嘻。
配置方式
Python中可以使用多種格式配置logging,比如.conf, .ini等。
在Django中,我們是把有關(guān)logging的配置寫到settings里面。相應(yīng)的配置及解釋如下(僅供參考)。
#管理員郵箱 ADMINS = ( ('laixintao','*******@163.com'), ) #非空鏈接,卻發(fā)生404錯(cuò)誤,發(fā)送通知MANAGERS SEND_BROKEN_LINK_EMAILS = True MANAGERS = ADMINS #Email設(shè)置 EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST= 'smtp.163.com'#QQ郵箱SMTP服務(wù)器(郵箱需要開通SMTP服務(wù)) EMAIL_PORT= 25 #QQ郵箱SMTP服務(wù)端口 EMAIL_HOST_USER = '**********@163.com' #我的郵箱帳號(hào) EMAIL_HOST_PASSWORD = '**************' #授權(quán)碼 EMAIL_SUBJECT_PREFIX = 'website' #為郵件標(biāo)題的前綴,默認(rèn)是'[django]' EMAIL_USE_TLS = True #開啟安全鏈接 DEFAULT_FROM_EMAIL = SERVER_EMAIL = EMAIL_HOST_USER #設(shè)置發(fā)件人 #logging日志配置 LOGGING = { 'version': 1, 'disable_existing_loggers': True, 'formatters': {#日志格式 'standard': { 'format': '%(asctime)s [%(threadName)s:%(thread)d] [%(name)s:%(lineno)d] [%(module)s:%(funcName)s] [%(levelname)s]- %(message)s'} }, 'filters': {#過濾器 'require_debug_false': { '()': 'django.utils.log.RequireDebugFalse', } }, 'handlers': {#處理器 'null': { 'level': 'DEBUG', 'class': 'logging.NullHandler', }, 'mail_admins': {#發(fā)送郵件通知管理員 'level': 'ERROR', 'class': 'django.utils.log.AdminEmailHandler', 'filters': ['require_debug_false'],# 僅當(dāng) DEBUG = False 時(shí)才發(fā)送郵件 'include_html': True, }, 'debug': {#記錄到日志文件(需要?jiǎng)?chuàng)建對(duì)應(yīng)的目錄,否則會(huì)出錯(cuò)) 'level':'DEBUG', 'class':'logging.handlers.RotatingFileHandler', 'filename': os.path.join(BASE_DIR, "log",'debug.log'),#日志輸出文件 'maxBytes':1024*1024*5,#文件大小 'backupCount': 5,#備份份數(shù) 'formatter':'standard',#使用哪種formatters日志格式 }, 'console':{#輸出到控制臺(tái) 'level': 'DEBUG', 'class': 'logging.StreamHandler', 'formatter': 'standard', }, }, 'loggers': {#logging管理器 'django': { 'handlers': ['console'], 'level': 'DEBUG', 'propagate': False }, 'django.request': { 'handlers': ['debug','mail_admins'], 'level': 'ERROR', 'propagate': True, }, # 對(duì)于不在 ALLOWED_HOSTS 中的請求不發(fā)送報(bào)錯(cuò)郵件 'django.security.DisallowedHost': { 'handlers': ['null'], 'propagate': False, }, } }
以上的配置文件中,有三個(gè)日志處理器。分別是:
- ‘django.request':django的request發(fā)生error會(huì)自動(dòng)記錄,然后使用debug將信息記錄到文件,還有mail_admins將信息通過郵件發(fā)送給管理員。這里郵件的功能非常棒!并不是一個(gè)純文本信息,而是一個(gè)html文件,和我們在瀏覽器看到的錯(cuò)誤頁面一模一樣!要正常使用郵件功能需要像我一樣配置一下上面的郵件發(fā)件人信息。我是直接去網(wǎng)易申請了一個(gè)郵箱。要格外注意三點(diǎn):1.一定要去郵件服務(wù)商開啟SMTP服務(wù);2.不同的郵件服務(wù)商可能有一些特殊的設(shè)置,比如網(wǎng)易,會(huì)給你一個(gè)客戶端授權(quán)碼,這個(gè)才是密碼,而不是網(wǎng)頁的登錄密碼。3 注意服務(wù)商有沒有對(duì)發(fā)信頻率的限制。
- ‘django':使用console處理器,將信息輸出。在開發(fā)的時(shí)候就可以使用這個(gè)處理器(什么?print? 太low了!)
- 最后一個(gè)處理器見注釋。
最后,不要忘了給日志的路徑響應(yīng)的權(quán)限。比如Apache2服務(wù)器,就需要給www-data寫權(quán)限:
sudo chown -R [yourname]:www-data [log] sudo chmod -R g+s [log]
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。
相關(guān)文章
python3 設(shè)置多進(jìn)程名稱并在ps命令中可見(Centos7 系統(tǒng))
setproctitle 是一個(gè) Python 模塊,用于設(shè)置進(jìn)程標(biāo)題(process title),通過設(shè)置進(jìn)程標(biāo)題,可以讓進(jìn)程在系統(tǒng)級(jí)的進(jìn)程管理工具中展示自定義的名稱,方便用戶查看和管理進(jìn)程,本文介紹python3 設(shè)置多進(jìn)程名稱并在ps命令中可見,感興趣的朋友一起看看吧2024-03-03pyinstaller生成的exe文件啟動(dòng)時(shí)間漫長的原因
本文主要介紹了pyinstaller生成的exe文件啟動(dòng)時(shí)間漫長的原因,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-01-01pandas進(jìn)行時(shí)間數(shù)據(jù)的轉(zhuǎn)換和計(jì)算時(shí)間差并提取年月日
這篇文章主要介紹了pandas進(jìn)行時(shí)間數(shù)據(jù)的轉(zhuǎn)換和計(jì)算時(shí)間差并提取年月日,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07Python中Flask-RESTful編寫API接口(小白入門)
這篇文章主要介紹了Python中Flask-RESTful編寫API接口(小白入門),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12Python標(biāo)準(zhǔn)庫os庫的常用功能解析
這篇文章主要介紹了Python標(biāo)準(zhǔn)庫os庫的常用功能解析,os庫是Python標(biāo)準(zhǔn)庫之一,它提供了非常豐富的文件及目錄讀寫的方法2022-07-07Python網(wǎng)絡(luò)編程中urllib2模塊的用法總結(jié)
使用urllib2模塊進(jìn)行基于url的HTTP請求等操作大家也許都比較熟悉,這里我們再深入來了解一下urllib2針對(duì)HTTP的異常處理相關(guān)功能,一起來看一下Python網(wǎng)絡(luò)編程中urllib2模塊的用法總結(jié):2016-07-07