私はいくつかのDjangoモデルをbog-standerd django.test.Testcaseでテストしています。 Django unittestsのログインをstderrに印刷するのを止めるには?
import logging
logger = logging.getLogger(__name__) # name is myapp.models
そして私はとログへの書き込み:私のmodels.pyには、以下のinitコードを使用して、デバッグログに書き込み、私が設定した、私のsettings.pyで
logger.debug("Here is my message")
そのハンドラとそのハンドラのみを使用して、単一のFileHandlerとmyapp用のロガーを作成します。これは素晴らしい。私はそのログにメッセージを見る。私がDjangoシェルにいるとき、私はのみそのログへのメッセージを見ます。
しかし、テストスイートを実行すると、私のテストスイートコンソールもに表示されます。それは私が明示的に定義していない別のフォーマッタを使用しており、stderrに書き出しています。 stderrに書き込むログハンドラは定義されていません。
私は本当にそれらのメッセージが自分のコンソールにスパムして欲しいとは思わない。私はそれらのメッセージを見たいと思えば私のログファイルを尾を引きます。それを止める方法はありますか? (はい、私は標準エラー出力をリダイレクトすることができますが、有用な出力にも標準エラー出力に移行する。)
編集:私は私のsettings.pyで2つのハンドラ設定しました:
'handlers': {
'null': {
'level': 'DEBUG',
'class': 'django.utils.log.NullHandler',
},
'logfile' : {
'level':'DEBUG',
'class':'logging.FileHandler',
'filename':'%s/log/development.log' % PROJECT_DIR,
'formatter': 'simple'
},
},
をして、この試みた:
を'loggers': {
'django': {
'level': 'DEBUG',
'handlers': ['null']
},
'myapp': {
'handlers': ['logfile'],
'level':'DEBUG',
},
...ただし、ロギング/ stderrダンプの動作は変わりません。テストを実行しているときに別のログハンドラを取得しているようです。
testまたはruntestコマンド用に特別にロギングを設定する方法を尋ねていますか? 'settings.py'を変更しようとしましたか? –
テストを実行しているときとそうでないときとで、ロギングの動作が異なります。私はそれを止めたい。私は、settings.pyのロギング設定はおそらく変更したいものだと思います。私は何を変える必要があるのか分かりません。運のないデフォルトの 'django'ハンドラを設定しようとしました。 – Nate
私のテストメソッドの1つにいくつかのポンキングを追加すると、実際にはもっと混乱させるように見えます。私のテストでml = logging.getLogger( 'myapp.models')を実行すると、ハンドラがないように見えます(ml.handlersがそれらをリストしていると仮定します)。しかし、このコンテキストでは、ml.debug( "MESSAGE")を実行すると、ログファイルに書き込まれますが、標準エラーは書き込まれません。私は今、完全に困惑しています。 – Nate