前言
一個(gè) Web 項(xiàng)目排吴,無論是在開發(fā)調(diào)試的時(shí)候瞬矩,還是上線為用戶提供服務(wù)以后姑廉,都需要保留下一些運(yùn)行當(dāng)中必要的信息用于日后的維護(hù)和故障的定位饭望。Django 中使用 Python 內(nèi)建的 logging
模塊做日志的收集塑娇。
Django 中日志系統(tǒng)配置
logging 模塊配置
logging 模塊為用戶提供了用于配置它的 api(接口函數(shù))- logging.config.dictConfig(config)
芥永。這里需要傳遞一個(gè)config
參數(shù)(日志配置參數(shù)字典)。config
通過 DictConfigurator
類進(jìn)行解析钝吮,其構(gòu)造方法使用了 config
埋涧,同時(shí)還有一個(gè) configure()
方法板辽。dictConfig()
方法內(nèi)部調(diào)用 dictConfigClass
初始化一個(gè) DictConfigurator
實(shí)例并調(diào)用 configure()
方法。
def dictConfig(config):
dictConfigClass(config).configure()
如果在 DJANGO 使用的話第一步需要在項(xiàng)目 setting.py 文件中定義這個(gè)上面說到的 config
(日志配置字典)棘催,包括記錄器(loggers)劲弦、處理器(handlers)、日志格式(formatters)醇坝、過濾器(filters)邑跪。
File:project/setting.py
LOGGING = {
'version': 1, # 標(biāo)示配置模板版本,int 類型呼猪,目前只接收 `1`這個(gè)值画畅。
'disable_existing_loggers': False, # 這個(gè)沒太看明白什么意思,了解的朋友麻煩說明下
'formatters': {
'standard': {
'format': '%(levelname)s %(asctime)s %(message)s',
},
},
'filters': {
# 這里是定義過濾器宋距,需要注意的是轴踱,由于 'filters' 是 logging.config.dictConfig 方法要求在配置字典中必須給訂的 key ,所以即使不使用過濾器也需要明確給出一個(gè)空的結(jié)構(gòu)。
},
'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 實(shí)例谚赎。
File:project/app/views.py
import logging
logger = logging.getLogger(__name__) # 這里使用 __name__ 動(dòng)態(tài)搜索定義的 logger 配置淫僻,這里有一個(gè)層次關(guān)系的知識(shí)點(diǎn)。
def log_test(request):
logger.error("level error test")
logger.info("level info test")
運(yùn)行上面代碼 "level error test" 會(huì)被寫入 project/app/log/view.log
壶唤,因?yàn)?logger 對(duì)象會(huì)根據(jù)層次搜索使用 setting.py 設(shè)置中的 project.app 記錄器配置雳灵。由于 project.app 記錄器配置綁定了 tofile 處理器,所以只會(huì)寫入 error 以上的日志記錄闸盔。
總結(jié)
到此是一個(gè) Django 中使用日志 logging 模塊的大致方法悯辙,細(xì)節(jié)還需要閱讀官方文檔,可能有不對(duì)的地方迎吵,日后慢慢更正躲撰。