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 旁边添加条目以包含您的***模块,例如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 日志系统......

以上是关于Django:如何将日志级别设置为 INFO 或 DEBUG的主要内容,如果未能解决你的问题,请参考以下文章

Apache Tiles 失败并出现错误,但仅当日志级别设置大于 INFO 时?

log4j日志级别

centos7web服务器如何设置核心模块core的错误日志为info级别?

Rsyslog 如何将日志分类为不同的严重级别?

关于log4j日志级别问题,懂的来

Spark日志级别修改