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