如何在Django调试工具中使用日志记录?

43 投票
3 回答
11491 浏览
提问于 2025-04-15 21:27

我想在我的Django应用程序中的视图函数的不同地方输出调试信息。关于django-debug-toolbar的文档说它使用了Python自带的日志功能,但我找不到更多的信息。我其实不想把日志记录到文件里,而是想把它显示在工具栏的信息面板上。这是怎么实现的呢?

3 个回答

8

如果你已经有一个现成的日志配置字典,而且不想通过切换到“增量”模式来搞乱它,那么你需要重新添加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'],
    },
}

如果有更简单的方法来做到这一点,我很想知道。

15

直接把日志记录到根日志器上,正如@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',
    },
}

设置“incremental”和“disable_existing_loggers”这两个选项很重要,这样你就不会禁用工具栏附加到根日志器的处理器。你只需要把根日志器的日志级别设置为“DEBUG”。你也可以使用“loggers”部分为特定的日志器设置级别。只需省略“Handlers”部分,并设置“propagate”:True,这样它们就能被DjDT处理器捕捉到。

44

你只需要使用日志模块的方法,DjDT 就会拦截这些日志信息并在日志面板中显示出来。

import logging

logging.debug('Debug Message')

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

撰写回答