特に、ディスクにログを記録する場合、ロギングは常にパフォーマンスに影響を与えます。しかし、いくつかの微妙な点があります。
レベルを使用すると、はるかに多くの文字列が評価され、ログ出力(ディスクなど)に書き込まれるため、レベルが:fatal
よりも大きくなります。
別の潜在的な落とし穴があなたのコード内でこのような多くの呼び出しがあればということである。
logger.debug = "my string to debug with a #{variable}"
を許可され、出力レベルがデバッグが含まれていない場合でも、パフォーマンスに影響があります。その理由は、Rubyがこれらの文字列を評価しなければならないということです。これは、幾分重いString
オブジェクトをインスタンス化し、変数を補間することを含み、それには時間がかかります。
したがって、出力レベルが同じか、許容レベルに含まれている場合(つまり、遅延ロード)のみ評価されるので、ブロックをロガーメソッドに渡すことをおすすめします。同じコードの書き換えは次のようになりますデバッグが有効な場合
logger.debug { "my string to debug with a #{variable}" }
ブロックの内容、従って文字列補間のみ評価されます。このパフォーマンスの節約は、大量のログを記録した場合にのみ顕著になりますが、採用することをお勧めします。
詳しくはLogger docsをご覧ください。
ブロックをロガーに渡すことができるかどうかは分かりませんでした。完璧! – CuriousMind