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

Posted

技术标签:

【中文标题】如何在 Django 调试工具栏中使用日志记录?【英文标题】:How do I use Logging in the Django Debug Toolbar? 【发布时间】:2011-02-06 14:05:22 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

import logging

logging.debug('Debug Message')

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

【讨论】:

工具栏没有显示低于警告级别的任何内容,我没有 LOGGING 配置【参考方案2】:

通常不建议直接记录到根记录器,正如@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”。您还可以使用“记录器”条目来设置特定记录器的级别。只需省略 "Handlers" 部分,并设置 "propagate":True 以便它们被 DjDT 处理程序捕获。

【讨论】:

感谢您详细介绍根记录器。这是其他答案所缺乏的信息。 设置部分帮了我,谢谢! 2016 年还是不错的建议【参考方案3】:

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

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

如果有更清洁的方法可以做到这一点,我很乐意看到它。

【讨论】:

以上是关于如何在 Django 调试工具栏中使用日志记录?的主要内容,如果未能解决你的问题,请参考以下文章

django 1.3 用于在开发环境中进行调试的日志记录

如何使用 Django Rest Framework 在 Django 中进行操作日志记录

如何在 Cloud Run 的日志中显示 django 日志记录和错误日志?

打印日志查看调接口时间

使用 DEBUG=False,我如何将 django 异常记录到日志文件中

如何在 Python Django 中运行单元测试时禁用日志记录?