首頁 >後端開發 >Python教學 >Django日誌模組的配置詳解

Django日誌模組的配置詳解

Y2J
Y2J原創
2017-05-10 11:46:392714瀏覽

日誌在程式開發中是少不了的,透過日誌我們可以分析到錯誤在什麼地方,有什麼異常。在生產環境下有很大的用處。在java 開發中通常用 log4j,logback 等三方元件。以下這篇文章主要介紹了Django日誌模組logging的相關資料,需要的朋友可以參考下。

前言

Django對於日誌輸出的資訊是很完善的,request的訊息,setting配置,trackback的信息,一應俱全,足夠我們調試了。但是在線上環境,如果讓使用者看到這些訊息,是很不安全的(暴露程式碼)。所以在線上我們要關閉Debug,但是又不能丟掉這些偵錯訊息,這就要用到logging模組。

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

理解Logger

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

處理流程

   formatter
logger ----> handler ----------------> files, emails
    filter

處理流程是這樣的。首先,在程式碼中。我們拿到的是logger實例,透過這個實例來記錄資訊。

# 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的這個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错误,发送通知MANAGERS
SEND_BROKEN_LINK_EMAILS = True
MANAGERS = 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]

總結

【相關推薦】

#1. Python免費影片教學

2. python遇見資料擷取影片教學

3. Python學習手冊

以上是Django日誌模組的配置詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn