2013-05-14 44 views
7

Railsは、標準ライブラリのRubyのloggerクラスにバンドルされています。使用可能なログレベルは、:debug,:info,:warn,:errorおよび:fatalです。Railsにログインすると、パフォーマンスが低下しますか?

ログレベルを:debugに設定して開発とテストを行うRailsアプリケーションに広範なログを追加するのかどうかは不明ですが、ロギングを無効にしてプロダクション環境で実行するとパフォーマンスに影響があります。 config.log_level = :fatal

答えて

17

特に、ディスクにログを記録する場合、ロギングは常にパフォーマンスに影響を与えます。しかし、いくつかの微妙な点があります。

レベルを使用すると、はるかに多くの文字列が評価され、ログ出力(ディスクなど)に書き込まれるため、レベルが:fatalよりも大きくなります。

別の潜在的な落とし穴があなたのコード内でこのような多くの呼び出しがあればということである。

logger.debug = "my string to debug with a #{variable}" 

を許可され、出力レベルがデバッグが含まれていない場合でも、パフォーマンスに影響があります。その理由は、Rubyがこれらの文字列を評価しなければならないということです。これは、幾分重いStringオブジェクトをインスタンス化し、変数を補間することを含み、それには時間がかかります。

したがって、出力レベルが同じか、許容レベルに含まれている場合(つまり、遅延ロード)のみ評価されるので、ブロックをロガーメソッドに渡すことをおすすめします。同じコードの書き換えは次のようになりますデバッグが有効な場合

logger.debug { "my string to debug with a #{variable}" } 

ブロックの内容、従って文字列補間のみ評価されます。このパフォーマンスの節約は、大量のログを記録した場合にのみ顕著になりますが、採用することをお勧めします。

詳しくはLogger docsをご覧ください。

+1

ブロックをロガーに渡すことができるかどうかは分かりませんでした。完璧! – CuriousMind

関連する問題