3
我在使用Django日誌時遇到了麻煩。我已經閱讀了關於日誌的Python和Django文檔,但是我仍然沒有看到我做錯了什麼。一開始,我只是想記錄消息的地方,當我執行這個簡單的觀點我的Django開發服務器運行該控制檯:這個Django日誌爲什麼不能工作?
# demo/views.py
import logging
logger = logging.getLogger(__name__)
def demo_logging(request, template):
logger.error("Got some error")
return render(request, template)
我使用Django默認的日誌記錄設置爲在Django/utils的規定/log.py在我的設置文件,這樣我(希望)確切地知道發生了什麼(這,顯然我沒有):
# settings.py
DEBUG = True
...
LOGGING_CONFIG = None
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse',
},
'require_debug_true': {
'()': 'django.utils.log.RequireDebugTrue',
},
},
'handlers': {
'console': {
'level': 'INFO',
'filters': ['require_debug_true'],
'class': 'logging.StreamHandler',
},
'null': {
'class': 'logging.NullHandler',
},
'mail_admins': {
'level': 'ERROR',
'filters': ['require_debug_false'],
'class': 'django.utils.log.AdminEmailHandler'
}
},
'loggers': {
'django': {
'handlers': ['console'],
},
'django.request': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': False,
},
'django.security': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': False,
},
'py.warnings': {
'handlers': ['console'],
},
}
}
import logging.config
logging.config.dictConfig(LOGGING)
當我執行來看,我沒有看到任何在控制檯消息除外,
No handlers could be found for logger "demo.views"
我不明白我做錯了什麼。我會認爲調用logger.error會擊中連接到已定義的控制檯處理程序的django記錄器。
謝謝。
跟進 我加入了默認,「無所不包」,將創建使用「__name__」參數記錄儀時被觸發記錄儀解決了這個問題:
'loggers': {
'': {
'handlers': ['console'],
},
...
這是真實的。但是,我剛剛發現的一種更好的方法可能是添加如上所示的默認記錄器。鑑於Django doc示例在指定記錄器時顯示使用「\ _ \ _ name \ _ \ _」,您會認爲它將討論創建默認的「全部捕獲」記錄器。 – William
是的,我同意你的看法,讓人奇怪爲什麼文檔沒有提到這個,或者爲什麼不是默認添加的「全部」記錄器。 – rafalmp