前言
一個 Web 項目,無論是在開發(fā)調試的時候,還是上線為用戶提供服務以后,都需要保留下一些運行當中必要的信息用于日后的維護和故障的定位。Django 中使用 Python 內建的 logging 模塊做日志的收集。
Django 中日志系統(tǒng)配置
logging 模塊配置
logging 模塊為用戶提供了用于配置它的 api(接口函數(shù))- logging.config.dictConfig(config)。這里需要傳遞一個config 參數(shù)(日志配置參數(shù)字典)。config 通過 DictConfigurator 類進行解析,其構造方法使用了 config,同時還有一個 configure() 方法。dictConfig() 方法內部調用 dictConfigClass 初始化一個 DictConfigurator 實例并調用 configure() 方法。
def dictConfig(config):
dictConfigClass(config).configure()
如果在 DJANGO 使用的話第一步需要在項目 setting.py 文件中定義這個上面說到的 config(日志配置字典),包括記錄器(loggers)、處理器(handlers)、日志格式(formatters)、過濾器(filters)。
File:project/setting.py
LOGGING = {
'version': 1, # 標示配置模板版本,int 類型,目前只接收 `1`這個值。
'disable_existing_loggers': False, # 這個沒太看明白什么意思,了解的朋友麻煩說明下
'formatters': {
'standard': {
'format': '%(levelname)s %(asctime)s %(message)s',
},
},
'filters': {
# 這里是定義過濾器,需要注意的是,由于 'filters' 是 logging.config.dictConfig 方法要求在配置字典中必須給訂的 key ,所以即使不使用過濾器也需要明確給出一個空的結構。
},
'handlers': {
'mail_admins': {
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler',
'formatter':'standard',
},
'tofile': {
'level': 'ERROR',
'class': 'logging.FileHandler',
'formatter':'standard',
'filename': 'project/app/log/view.log',
},
},
'loggers': {
'project.app': {
'handlers': ['tofile'],
'level': 'DEBUG',
'propagate': True,
},
}
}
下一步需要在需要記錄日志的地方創(chuàng)建 logger 實例。
File:project/app/views.py
import logging
logger = logging.getLogger(__name__) # 這里使用 __name__ 動態(tài)搜索定義的 logger 配置,這里有一個層次關系的知識點。
def log_test(request):
logger.error("level error test")
logger.info("level info test")
運行上面代碼 "level error test" 會被寫入 project/app/log/view.log,因為 logger 對象會根據(jù)層次搜索使用 setting.py 設置中的 project.app 記錄器配置。由于 project.app 記錄器配置綁定了 tofile 處理器,所以只會寫入 error 以上的日志記錄。
總結
到此是一個 Django 中使用日志 logging 模塊的大致方法,細節(jié)還需要閱讀官方文檔,可能有不對的地方,日后慢慢更正。