次のコードの場合:
logger.debug('message: {}'.format('test'))
pylint
次の警告が生成されます。
ログ形式の補間 (W1202):
ログ関数で % フォーマットを使用し、% パラメータを引数として渡します。ログ ステートメントの呼び出し形式が「logging.(format_string.format(format_args...))」の場合に使用します。このような呼び出しでは、代わりに % フォーマットを使用する必要がありますが、パラメータを引数として渡すことで、ログ関数への補間を任せます。
この警告をオフにできることはわかっていますが、理解したいと思います。format()
Python 3 でステートメントを出力するには、 using が推奨される方法だと想定していました。 なぜこれは logger ステートメントには当てはまらないのでしょうか?
ベストアンサー1
これは、ロガー ステートメントには当てはまりません。ロガー ステートメントは、ロガー呼び出しに渡される追加の引数を使用してこの文字列の遅延補間を提供するために、以前の "%" 形式の文字列に依存しているからです。たとえば、次のようにする代わりに:
logger.error('oops caused by %s' % exc)
やったほうがいい
logger.error('oops caused by %s', exc)
したがって、文字列はメッセージが実際に発行された場合にのみ補間されます。
を使用する場合、この機能は利用できません.format()
。
によると最適化ドキュメントのセクションlogging
:
メッセージ引数のフォーマットは、避けられない状況になるまで延期されます。ただし、ロギング メソッドに渡される引数の計算もコストがかかる可能性があるため、ロガーがイベントを破棄するだけの場合は、計算を行わないようにする必要があります。