问题 Django:如何将日志级别设置为INFO或DEBUG


我试图在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。这是正确的行为还是我还缺少某些东西?


8648
2017-11-01 04:26


起源

快速检查: logger.warn("Log level is set to {0}".format(logging.getLevelName(logger.level))) - Christian Ternus
警告:core.handlers:日志级别设置为NOTSET。所以这是警告的默认级别,对吧?为什么Django不会根据我的设置更改它? - kev
眨 呵呵。我一无所获。在我看来,你做的一切都很正确。 - Christian Ternus
我更新了我的回答以回应您的评论。 - Vinay Sajip


答案:


你需要添加例如

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

与...并行 django.request 进入,或

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

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

更新: 要显示所有模块的消息,只需添加条目 django.request 包括您的顶级模块,例如 apihandlerscore 管他呢。由于您还没有准确说明您的包/模块层次结构是什么,所以我不能更具体。


9
2017-11-01 08:52



这样可行。但有没有办法只显示我的调试日志?如果我设置'root'条目,我会在日志记录中获得我不感兴趣的所有sql查询。设置core.handlers会将调试输出限制为core.handlers。但是我希望在我的文件中看到所有的调试输出(所有handlers.py,api.py和我还有什么)。 - kev
@kev你找到了解决方案吗? :) - DataGreed
有点。我在这里创建了一个自定义文件记录器: pastebin.com/srT4mSdu,import logging logger = logging.getLogger('custom')logger.setLevel(logging.DEBUG) - kev


我通过改变来修复它

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'],
        },
    },
})

0
2018-05-01 21:29