Django:如何将日志级别设置为 INFO 或 DEBUG
Posted
技术标签:
【中文标题】Django:如何将日志级别设置为 INFO 或 DEBUG【英文标题】:Django: how to set log level to INFO or DEBUG 【发布时间】:2013-11-12 07:13:31 【问题描述】:我试图在 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
但是:配置文件似乎完全被忽略了。即使我将配置中的两个条目都设置回 ERROR,它也会打印两个语句 always。这是正确的行为还是我仍然遗漏了什么?
【问题讨论】:
快速查看:logger.warn("Log level is set to 0".format(logging.getLevelName(logger.level)))
警告:core.handlers:日志级别设置为 NOTSET。所以默认级别是警告,对吧?为什么 Django 不根据我的设置相应地更改它?
眨眼 呵呵。我什么都没有。在我看来,您所做的一切都是正确的。
我根据您的评论更新了我的答案。
【参考方案1】:
你需要添加例如
'core.handlers':
'level': 'DEBUG',
'handlers': ['console']
与django.request
条目并行,或
'root':
'level': 'DEBUG',
'handlers': ['console']
与“记录器”条目并行。这将确保在您实际使用的记录器上设置级别,而不仅仅是django.request
记录器。
更新:要显示所有模块的消息,只需在 django.request
旁边添加条目以包含您的***模块,例如api
、handlers
、core
或其他。由于您还没有确切地说出您的包/模块层次结构是什么,所以我不能更具体。
【讨论】:
那行得通。但是有没有办法只显示我的调试日志?如果我设置“root”条目,我会在日志中得到我不感兴趣的所有 sql 查询。设置 core.handlers 会将调试输出限制为 core.handlers。但我想在我的文件中查看所有调试输出(所有 handlers.py、api.py 以及我还有什么)。 @kev 你找到解决方案了吗? :) 有点。我在这里创建了一个自定义文件记录器:pastebin.com/srT4mSdu, import logging logger = logging.getLogger('custom') logger.setLevel(logging.DEBUG)【参考方案2】:我通过修改修复了它
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'],
,
,
)
【讨论】:
问题是关于 Django,你只是在这里绕过了整个 Django 日志系统......以上是关于Django:如何将日志级别设置为 INFO 或 DEBUG的主要内容,如果未能解决你的问题,请参考以下文章
Apache Tiles 失败并出现错误,但仅当日志级别设置大于 INFO 时?