如何在Django调试工具栏中使用Logging?

时间:2010-04-10 21:24:30

标签: python django debugging django-views

我想在视图功能的不同点在我的django应用程序中输出调试消息。 django-debug-toolbar的文档说它使用python日志记录中的构建,但我找不到更多信息。我真的不想记录到文件,而是记录到工具栏上的信息窗格。这是如何工作的?

3 个答案:

答案 0 :(得分:43)

您只需使用logging module方法,DjDT将拦截并在日志记录面板中显示它们。

import logging

logging.debug('Debug Message')

if some_error:
   logging.error('Error Message')

答案 1 :(得分:11)

通常不建议直接登录到根记录器,如@ jonwd7所述。通常我遵循这种模式:

import logging
logger = logging.getLogger(__name__)
del logging # To prevent accidentally using it

...

logger.debug("Some message")

这使您可以对日志消息执行和不显示的内容进行更精细的控制。不幸的是,这样使用它会阻止django调试工具栏捕获任何日志消息,除非您指定特定的日志记录配置。这是我能想到的最简单的一个:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'incremental': True,
    'root': {
        'level': 'DEBUG',
    },
}

设置"增量"和" disable_existing_loggers"这两个都很重要,因此您不会禁用附加到根记录器的工具栏的处理程序。你想要做的就是将根记录器的loglevel设置为" DEBUG"。你也可以使用"记录器"输入以设置特定记录器的级别。只需省略"处理程序" section,并设置"传播":为真,以便他们被DjDT处理程序捕获。

答案 2 :(得分:4)

如果你有一个现有的LOGGING配置字典,并且你不想通过切换到'incremental'来搞砸它,你需要重新添加DjDT日志作为处理程序,然后将它添加到根目录记录器的处理程序列表。

from debug_toolbar.panels.logging import collector # needed for handler constructor below
LOGGING = {
    # existing options, formatters, loggers, etc
    handlers = {
        # existing handlers
        'djdt_log': {
            'level': 'DEBUG',
            'class': 'debug_toolbar.panels.logging.ThreadTrackingHandler',
            'collector': collector,
        },
    },
    'root': {
        'level': 'DEBUG',
        'handlers': ['djdt_log'],
    },
}

如果有更清洁的方法,我很乐意看到它。