国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Django日志模塊logging的配置詳解

2019-11-25 16:21:18
字體:
來源:轉載
供稿:網友

前言

Django對于日志輸出的信息是很完善的,request的信息,setting配置,trackback的信息,一應俱全,足夠我們調試了。但是在線上環境,如果讓用戶看到這些信息,是很不安全的(暴露代碼)。所以在線上我們要關閉Debug,但是又不能扔掉這些調試信息,這就要用到logging模塊。

logging模塊其實是Python的模塊,在Django中有很多本地化的支持。

理解Logger

首先要理解logging的工作,這里面主要有四個東西:格式器formatter,過濾器filter,處理器handler,日志實例logger。

處理流程

   formatterlogger ----> handler ----------------> files, emails    filter

處理流程是這樣的。首先,在代碼中。我們拿到的是logger實例,通過這個實例來記錄信息。

# import the logging libraryimport logging # Get an instance of a loggerlogger = logging.getLogger('django') def my_view(request, arg1, arg): ... if bad_mojo: # Log an error message logger.error('Something went wrong!')

然后,名字是django的這個logger就會把信息交給相應的handler,handler把信息用formater和filter處理一下,提交log(保存到文件,數據庫,或者發送郵件)。

一般來說,handler可以是send_email,error_file等負責處理的方式,在logger中可以重復使用handler。例如我們的django處理器使用了send_email, error_file 這兩個處理器,request處理器使用error_file,info_file兩個處理器,logger和handler可以理解成多對多的關系,嘻嘻。

配置方式

Python中可以使用多種格式配置logging,比如.conf, .ini等。

在Django中,我們是把有關logging的配置寫到settings里面。相應的配置及解釋如下(僅供參考)。

#管理員郵箱ADMINS = ( ('laixintao','*******@163.com'),) #非空鏈接,卻發生404錯誤,發送通知MANAGERSSEND_BROKEN_LINK_EMAILS = TrueMANAGERS = ADMINS #Email設置EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'EMAIL_HOST= 'smtp.163.com'#QQ郵箱SMTP服務器(郵箱需要開通SMTP服務)EMAIL_PORT= 25 #QQ郵箱SMTP服務端口EMAIL_HOST_USER = '**********@163.com' #我的郵箱帳號EMAIL_HOST_PASSWORD = '**************' #授權碼EMAIL_SUBJECT_PREFIX = 'website' #為郵件標題的前綴,默認是'[django]'EMAIL_USE_TLS = True #開啟安全鏈接DEFAULT_FROM_EMAIL = SERVER_EMAIL = EMAIL_HOST_USER #設置發件人 #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': {#發送郵件通知管理員  'level': 'ERROR',  'class': 'django.utils.log.AdminEmailHandler',  'filters': ['require_debug_false'],# 僅當 DEBUG = False 時才發送郵件  'include_html': True, }, 'debug': {#記錄到日志文件(需要創建對應的目錄,否則會出錯)  'level':'DEBUG',  'class':'logging.handlers.RotatingFileHandler',  'filename': os.path.join(BASE_DIR, "log",'debug.log'),#日志輸出文件  'maxBytes':1024*1024*5,#文件大小   'backupCount': 5,#備份份數  'formatter':'standard',#使用哪種formatters日志格式 }, 'console':{#輸出到控制臺  '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, }, # 對于不在 ALLOWED_HOSTS 中的請求不發送報錯郵件 'django.security.DisallowedHost': {  'handlers': ['null'],  'propagate': False, }, } }

以上的配置文件中,有三個日志處理器。分別是:

  1. ‘django.request':django的request發生error會自動記錄,然后使用debug將信息記錄到文件,還有mail_admins將信息通過郵件發送給管理員。這里郵件的功能非常棒!并不是一個純文本信息,而是一個html文件,和我們在瀏覽器看到的錯誤頁面一模一樣!要正常使用郵件功能需要像我一樣配置一下上面的郵件發件人信息。我是直接去網易申請了一個郵箱。要格外注意三點:1.一定要去郵件服務商開啟SMTP服務;2.不同的郵件服務商可能有一些特殊的設置,比如網易,會給你一個客戶端授權碼,這個才是密碼,而不是網頁的登錄密碼。3 注意服務商有沒有對發信頻率的限制。
  2. ‘django':使用console處理器,將信息輸出。在開發的時候就可以使用這個處理器(什么?print? 太low了!)
  3. 最后一個處理器見注釋。

最后,不要忘了給日志的路徑響應的權限。比如Apache2服務器,就需要給www-data寫權限:

sudo chown -R [yourname]:www-data [log]sudo chmod -R g+s [log]

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 原平市| 天峻县| 新泰市| 永昌县| 西安市| 彭山县| 白玉县| 祁阳县| 山西省| 安龙县| 无锡市| 泌阳县| 松潘县| 平定县| 九龙县| 象山县| 武穴市| 怀远县| 景东| 新丰县| 离岛区| 成都市| 景泰县| 沁阳市| 阳朔县| 昌宁县| 大理市| 手游| 阿尔山市| 绥棱县| 文水县| 长治县| 观塘区| 洞口县| 微山县| 延川县| 巢湖市| 南陵县| 双桥区| 冷水江市| 丰原市|