2013-03-28 8 views
5

私はtie Raven into the logging setupにしようとしているプレーンなPython(非Django)プロジェクトを持っています。RavenのSentryHandlerはファイルへのStreamHandlerの出力を抑制する

私たちの現在の設定の下で、我々は、単純なログの設定を使用します。

import logging 
logging.basicConfig(format='long detailed format', 
        level=logging.DEBUG) 

出力は、ログファイルにリダイレクトされます。これにより、われわれが必要とするときに見ることができる素晴らしい、冗長なログが生成されます。

現在logging.errorは、Sentryのサーバに送信されるメッセージで結果を呼び出すように私たちの現在のロギング設定にそれを結ぶ、レイヴンのエラーログを追加したいです。次のコードを使用する:

from raven import Client 
from raven.conf import setup_logging 
from raven.handlers.logging import SentryHandler 

raven = Client(environ.get('SENTRYURL', ''), site='SITE') 
setup_logging(SentryHandler(raven, level=logging.ERROR)) 

エラーが正常に歩哨に送信されているが、私は今、ファイル出力の単一の行を取得しています:

DEBUG: Configuring Raven for host: <DSN url> 

他のすべてのファイル出力を - logging.debugからにlogging.error - を抑制しています。

私がsetup_logging行にコメントすると、ファイル出力が得られますが、Sentryエラーはありません。私は間違って何をしていますか?

答えて

3

これは、コードが不適切であることが判明しました。 logging.rootは、既存のハンドラを持っている場合logging.basicConfigは何もしませんので、

logging.root.removeHandler(logging.root.handlers[0]) # Undo previous basicConfig 
logging.basicConfig(format='same long format', 
        level=logging.DEBUG) 

しかし、これは単に見張りハンドラを残して、ストリームハンドラを削除:我々は再初期化ロギングが起動実行パスの他の場所でいくつかのハックを持っていましたbasicConfigはno-opとして動作します。これは、StreamHandlerを完全に失ったことを意味します。

これらの回線を削除し、basicConfigsetup_loggingのコールが1つしか機能していない。

関連する問題