我尝试将 Django 中的调试级别更改为 DEBUG,因为我想向我的代码添加一些调试消息。好像没有什么效果
我的日志配置:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'simple': {
'format': '%(levelname)s %(message)s'
},
},
'handlers': {
'console':{
'level':'DEBUG',
'class':'logging.StreamHandler',
'formatter': 'simple'
},
},
'loggers': {
'django.request':{
'handlers': ['console'],
'propagate': False,
'level': 'DEBUG',
},
},
}
代码:
import logging ; logger = logging.getLogger(__name__)
logger.debug("THIS MESSAGE IS NOT SHOWN IN THE LOGS")
logger.warn("THIS ONE IS")
控制台输出:
WARNING:core.handlers:THIS ONE IS
我还尝试在我的设置文件中设置 DEBUG = False 和 DEBUG = True 。有什么想法吗?
编辑:如果我直接在记录器上设置日志级别,它就可以工作:
import logging ; logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
logger.debug("THIS MESSAGE IS NOT SHOWN IN THE LOGS")
输出:
DEBUG:core.handlers:THIS MESSAGE IS NOT SHOWN IN THE LOGS
WARNING:core.handlers:THIS ONE IS
但是:配置文件似乎被完全忽略了。即使我将配置中的两个条目设置回错误,它也会打印这两个语句always。这是正确的行为还是我仍然遗漏了什么?
您需要添加例如
'core.handlers': {
'level': 'DEBUG',
'handlers': ['console']
}
与
django.request
条目并行,或者
'root': {
'level': 'DEBUG',
'handlers': ['console']
}
与“记录器”条目并行。这将确保在您实际使用的记录器上设置级别,而不仅仅是
django.request
记录器。
更新: 要显示所有模块的消息,只需在
django.request
旁边添加条目即可包含您的顶级模块,例如api
,handlers
,core
或其他什么。由于您没有确切说明您的包/模块层次结构是什么,因此我无法更具体。
我通过更改修复了它
LOGGING = {
...
}
至:
logging.config.dictConfig({
...
})
例如将所有消息记录到控制台:
import logging.config
LOGGING_CONFIG = None
logging.config.dictConfig({
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'console': {
# exact format is not important, this is the minimum information
'format': '%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
},
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'formatter': 'console',
},
},
'loggers': {
# root logger
'': {
'level': 'DEBUG',
'handlers': ['console'],
},
},
})
我想,这是使用 settings.py 更改根记录器日志级别的最低配置。
LOGGING = {
"version": 1,
"root": {
"level": "INFO"
}
}