5

私が理解しているように、

 'hello {0}'.format("world")

より遅い:

"hello %s" % "world"

私の質問は、次のように渡されたときにロガーが文字列をどのようにフォーマットするかです。

logger.debug("hello %s", "world")

そして、ログがオフになることは決してないと仮定すると、次のようにする方がよいでしょう。

logger.debug("hello %s" % "world")
4

3 に答える 3

13

Sentry などのロギング集約サービスを使用することになった場合は、次のすべての呼び出しを忘れないでください。

logger.error("hello %s", planet)

同じエラーの複数回の発生としてグループ化されますが、すべての呼び出しは次のとおりです。

logger.error("hello %s" % (planet,))

それぞれが 1 回発生したさまざまなエラーとしてリストされます。これにより、実際に頻繁に発生しているエラーをトリアージすることが困難になる可能性があります。

このグループ化の動作は、ロギング呼び出しの最初のパラメーターの値に基づいています。最初の例ではすべて同一ですが、2 番目の例ではすべて「planet」の値に依存しています。

そのため、ロギングに渡す文字列に「%」または .format 演算子を使用しないことが重要です。ロギング呼び出しに任せてください。

于 2012-11-14T08:42:18.303 に答える
6

logger.debug(msg, arg1, arg2)文書化されているので、ここで驚くことはありません。msg = msg % (arg1, arg2)

logger.debug(msg, arg1, arg2, ...)よりきれいに見えるかもしれlogger.debug(msg % (arg1, arg2, ...))ませんし、時期尚早にフォーマットを実行することもありません。

于 2012-07-21T04:56:28.527 に答える
4

違いはほとんどありません。ロガーにかかる時間は、主にその出力チャネルの速度に影響されます。IO は常に低速です。%と比較して使用するロガーの違いは、.format文字列あたり約 0.5 マイクロ秒になります。ロガーは、平均して、それよりかなり長い時間 (おそらく数秒) を費やして、実際に各文字列をログに記録します。

于 2012-07-21T04:54:56.047 に答える