5

Raven をログ設定に結び付けようとしているプレーンな python (非 Django) プロジェクトがあります。

現在のセットアップでは、単純なログ構成を使用します。

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

その後、出力はログ ファイルにリダイレクトされます。これにより、必要なときに参照できる適切で詳細なログが生成されます。

ここで、Raven のエラー ログを追加して、現在のログ設定に結びつけ、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))

エラーは Sentry に正常に送信されていますが、ファイル出力は 1 行しか得られません。

DEBUG: Configuring Raven for host: <DSN url>

他のすべてのファイル出力 -- ~ からlogging.debug--logging.errorは抑制されています。

この行にコメントを付けるsetup_loggingと、ファイル出力が表示されますが、Sentry エラーは表示されません。私は何を間違っていますか?

4

1 に答える 1

3

これは、ずさんなコードのケースであることが判明しました。ロギングを再初期化するスタートアップ実行パスの別の場所にハックがありました。

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

ただし、既存のハンドラーがlogging.basicConfigある場合は何もしないためlogging.root、これは単純にストリーム ハンドラーを削除し、sentry ハンドラーを残して、basicConfigno-op として動作させました。つまり、StreamHandler が完全に失われました。

これらの回線を削除し、1 つの回線だけをbasicConfig呼び出しsetup_loggingて機能させました。

于 2013-03-28T15:48:42.153 に答える