4

Python 2.4以降では、より基本的なフォーマットを持つようにロギングモジュールを構成するのは簡単です。

logging.basicConfig(level = opts.LOGLEVEL、format = "%(message)s")

しかし、Python 2.3をサポートする必要のあるアプリケーションの場合、ロギングAPIがPy2.4でオーバーホールされたため、より難しいように思われます。特に、basicConfigは引数を取りません。Py2.3ドキュメントの唯一の例のバリエーションを試してみると、次のようになります。

try:
    logging.basicConfig(level=opts.LOGLEVEL, format="%(message)s")
except:
    logging.getLogger().setLevel(opts.LOGLEVEL)
    h = logging.StreamHandler()
    h.setFormatter(logging.Formatter("%(message)s"))
    logging.getLogger().addHandler(h)

しかし、Py2.3でこのルートロガーを呼び出す、例えば

logging.info("Foo")

重複した出力を提供します:

Foo
INFO:root:Foo

Py2.3のルートロガーの既存のハンドラーの形式を変更する方法が見つかりません(上記の「except」ブロック)。したがって、重複した出力を生成する「addHandler」呼び出しがあります。この重複なしにルートロガーのフォーマットを設定する方法はありますか?ありがとう!

4

1 に答える 1

4

except:例外なく、class[es] はトラブルに巻き込まれる良い方法です。loggingPython 2.3 のモジュールにはbasicConfig()機能がありますが、オプションが少ないと思います。それは受け入れるので、**kwargs何らかの仕事をした後はいつでも失敗する可能性があります。デフォルト形式のハンドラーが既にインストールされていて、何かを構成できなかったと思います。例外をキャッチした後、別のハンドラーをインストールしました。2 つのハンドラーがあると、イベントごとに 2 つのメッセージを受け取ります。basicConfig()あなたの場合の最も簡単な方法:使用をまったく避け、logging手動で構成します。except:また、キャッチされた例外を再発生させたりログに記録したりしない場合は、決して使用しないでください。

于 2009-10-30T10:35:21.053 に答える