【问题标题】:Django: how to set log level to INFO or DEBUGDjango:如何将日志级别设置为 INFO 或 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 不根据我的设置相应地更改它?
  • 眨眼 呵呵。我什么都没有。在我看来,您所做的一切都是正确的。
  • 我根据您的评论更新了我的答案。

标签: python django logging configuration-files


【解决方案1】:

你需要添加例如

'core.handlers': {
    'level': 'DEBUG',
    'handlers': ['console']
}

django.request 条目并行,或

'root': {
    'level': 'DEBUG',
    'handlers': ['console']
}

与“记录器”条目并行。这将确保在您实际使用的记录器上设置级别,而不仅仅是django.request 记录器。

更新:要显示所有模块的消息,只需在 django.request 旁边添加条目以包含您的顶级模块,例如apihandlerscore 或其他。由于您还没有确切地说出您的包/模块层次结构是什么,所以我不能更具体。

【讨论】:

  • 那行得通。但是有没有办法只显示我的调试日志?如果我设置“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 日志系统......
猜你喜欢
  • 1970-01-01
  • 2021-09-14
  • 1970-01-01
  • 2011-10-02
  • 1970-01-01
  • 1970-01-01
  • 2011-05-06
  • 2016-12-11
  • 2020-04-02
相关资源
最近更新 更多