5

Pythonロギングフォーマッターで部分的な文字列フォーマットを実行する方法を探しています。

フォーマッタを次のように定義しようとすると、次のようになります。

formatter = logging.Formatter('[num-%d] %(levelname)s %(message)s' % (num,))

インタプリタが「levelname」と「message」を見つけることができなかったので、「フォーマットにはマッピングが必要です」というTypeErrorが発生します。

もちろん、ロギングフレームワークが処理できるように、「levelname」と「message」の両方をフォーマットせずに残しておく必要があります。

私が見るように、問題に対処する他の2つの方法があります。

  1. format = '[num-' + str(num) + '] %(levelname)s %(message)s' % (num,)
  2. format = '[num-%(num)d] %(levelname)s %(message)s' % dict(num=num, levelname='%(levelname)s', message='%(message)s')

ただし、どちらの解決策もやや醜いものであり、Pythonで、またはpython組み込みのロギングフレームワークで使用して、文字列の一部のみをフォーマットするためのより良い方法があるはずだと思います。

何か案は?

4

1 に答える 1

5

これを試して:

formatter = logging.Formatter('[num-%d] %%(levelname)s %%(message)s' % (num,))

Formatterメソッドにフィールドを含む文字列を指定する必要があり%(...)sます。に%%解釈される%ため、使用できます。

于 2011-08-24T13:09:13.813 に答える