43

I would like to output debug messages in my django app at different points in a view function. The docs for the django-debug-toolbar say it uses the build in python logging but I can't find any more information then that. I don't really want to log to a file but to the info pane on the toolbar. How does this work?

4

3 に答える 3

44

ロギング モジュールメソッドを使用するだけで、DjDT がそれらをインターセプトし、ロギング パネルに表示します。

import logging

logging.debug('Debug Message')

if some_error:
   logging.error('Error Message')
于 2010-04-10T21:44:17.987 に答える
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',
    },
}

「増分」と「disable_existing_loggers」の設定はどちらも重要であるため、ルートロガーに接続されたツールバーのハンドラーを無効にしないでください。やりたいことは、ルート ロガーのログレベルを「DEBUG」に設定することだけです。「loggers」エントリを使用して、特定のロガーのレベルを設定することもできます。「Handlers」セクションを省略し、「propagate」:True を設定して、DjDT ハンドラーによってキャプチャされるようにします。

于 2015-07-23T00:30:59.927 に答える
8

既存の LOGGING 構成辞書があり、「インクリメンタル」に切り替えてそれを台無しにしたくない場合は、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'],
    },
}

これを行うためのよりクリーンな方法があれば、私はそれを見てみたいです。

于 2018-01-17T00:24:07.283 に答える