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?
3 に答える
ロギング モジュールメソッドを使用するだけで、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',
},
}
「増分」と「disable_existing_loggers」の設定はどちらも重要であるため、ルートロガーに接続されたツールバーのハンドラーを無効にしないでください。やりたいことは、ルート ロガーのログレベルを「DEBUG」に設定することだけです。「loggers」エントリを使用して、特定のロガーのレベルを設定することもできます。「Handlers」セクションを省略し、「propagate」:True を設定して、DjDT ハンドラーによってキャプチャされるようにします。
既存の 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'],
},
}
これを行うためのよりクリーンな方法があれば、私はそれを見てみたいです。