私が理解しているように、
'hello {0}'.format("world")
より遅い:
"hello %s" % "world"
私の質問は、次のように渡されたときにロガーが文字列をどのようにフォーマットするかです。
logger.debug("hello %s", "world")
そして、ログがオフになることは決してないと仮定すると、次のようにする方がよいでしょう。
logger.debug("hello %s" % "world")
私が理解しているように、
'hello {0}'.format("world")
より遅い:
"hello %s" % "world"
私の質問は、次のように渡されたときにロガーが文字列をどのようにフォーマットするかです。
logger.debug("hello %s", "world")
そして、ログがオフになることは決してないと仮定すると、次のようにする方がよいでしょう。
logger.debug("hello %s" % "world")
Sentry などのロギング集約サービスを使用することになった場合は、次のすべての呼び出しを忘れないでください。
logger.error("hello %s", planet)
同じエラーの複数回の発生としてグループ化されますが、すべての呼び出しは次のとおりです。
logger.error("hello %s" % (planet,))
それぞれが 1 回発生したさまざまなエラーとしてリストされます。これにより、実際に頻繁に発生しているエラーをトリアージすることが困難になる可能性があります。
このグループ化の動作は、ロギング呼び出しの最初のパラメーターの値に基づいています。最初の例ではすべて同一ですが、2 番目の例ではすべて「planet」の値に依存しています。
そのため、ロギングに渡す文字列に「%」または .format 演算子を使用しないことが重要です。ロギング呼び出しに任せてください。
違いはほとんどありません。ロガーにかかる時間は、主にその出力チャネルの速度に影響されます。IO は常に低速です。%
と比較して使用するロガーの違いは、.format
文字列あたり約 0.5 マイクロ秒になります。ロガーは、平均して、それよりかなり長い時間 (おそらく数秒) を費やして、実際に各文字列をログに記録します。