1. ホーム
  2. python

[解決済み] Pythonのロギングフォーマットはメッセージログレベルに応じて変更できますか?

2023-08-01 08:06:33

質問

私はPythonの logging メカニズムを使用しています。 printステートメントでこれを行うことができますが、私は、ユーザーが特定のタイプの出力を無効にするために、より細かい粒度を可能にしたいです。 私はエラーのために印刷されたフォーマットが好きですが、出力レベルが "info." のときはよりシンプルなフォーマットを希望します。

たとえば

  logger.error("Running cmd failed")
  logger.info("Running cmd passed")

この例では、エラーの書式を変えて出力して欲しいです。

# error
Aug 27, 2009 - ERROR: Running cmd failed
# info
Running cmd passed

複数のロギング オブジェクトを持つことなく、異なるログ レベルに異なるフォーマットを持つことは可能ですか? 出力をどのようにログに記録するかを決定するための if/else 文の数が多いので、一度作成したロガーを変更せずにこれを行うことを希望します。

どのように解決するのですか?

そうです。 Formatter クラスを作成します。

class MyFormatter(logging.Formatter):
    def format(self, record):
        #compute s according to record.levelno
        #for example, by setting self._fmt
        #according to the levelno, then calling
        #the superclass to do the actual formatting
        return s

次に MyFormatter のインスタンスをハンドラに追加します。