簡體   English   中英

如何在Django調試工具欄中使用Logging?

[英]How do I use Logging in the Django Debug Toolbar?

我想在視圖功能的不同點在我的django應用程序中輸出調試消息。 django-debug-toolbar的文檔說它使用了python日志記錄中的構建,但我找不到更多的信息。 我真的不想記錄到文件,而是記錄到工具欄上的信息窗格。 這是如何運作的?

您只需使用日志記錄模塊方法,DjDT將攔截並在日志記錄面板中顯示它們。

import logging

logging.debug('Debug Message')

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

通常不建議直接記錄到根記錄器,如@ 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”都很重要,因此您不會禁用附加到根記錄器的工具欄的處理程序。 您要做的就是將根記錄器的loglevel設置為“DEBUG”。 您還可以使用“記錄器”條目為特定記錄器設置級別。 只需省略“Handlers”部分,然后設置“propagate”:True,這樣它們就會被DjDT處理程序捕獲。

如果你有一個現有的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'],
    },
}

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM