18

log4net の使用とSystem.Diagnostics.Traceロギングの違いを調査しており、観察したパフォーマンスの違いに興味があります。

いくつかのシナリオで両方のロギング方法のパフォーマンスを比較するテスト アプリケーションを作成しましたが、log4net はTraceクラスよりも大幅に遅いことがわかりました。たとえば、文字列フォーマットなしで 1,000 件のメッセージをログに記録するシナリオでは、1,000 回の試行での log4net の平均実行時間は 9.00 ミリ秒です。 Trace平均 1.13ms で実行されます。多くのテスト ケースでは、log4net の実行時間に比較的大きなばらつきがあります。外れ値の長い実行の周期的な性質は、GC 干渉を示唆しているようです。CLR Profiler をいじってみると、生成された大量のオブジェクトに対して大量のコレクションが存在することが確認log4net.Core.LoggingEventされます (公平を期すために、大量のオブジェクトも生成されているように見えますが、log4net のように大きな分散は表示されません。 )TraceChar[]

ここで私が心に留めていることの 1 つは、log4net は よりも約 9 倍遅いように見えますがTrace、その差は 1,000 回の反復で 8 ミリ秒であることです。これは正確には重大なパフォーマンスの低下ではありません。それでも、予想される使用例のいくつかは、何十万回もログを記録するメソッドを呼び出す可能性があり、これらの数値は私の高速マシンからのものです。ユーザーの構成のより典型的な低速のマシンでは、違いは 170 ミリ秒から 11 ミリ秒であり、これは少し憂慮すべきことです。

このパフォーマンスは log4net の典型的なものですか、それとも log4net のパフォーマンスを大幅に向上させることができる落とし穴がありますか?

(注: 文字列の書式設定によって実行時間が変わる可能性があることは認識しています。リンゴとリンゴを比較しようとしていますが、書式設定のないテスト ケースと書式設定のあるテスト ケースがあります。文字列の書式設定が使用されているかどうかにかかわらず、log4net は比例して遅くなります。 )

これまでの話:

  • Robert Gould がこの質問に対する最良の答えを持っています。log4net のパフォーマンスがTraceクラスよりもはるかに遅いことが一般的であるかどうかに主に興味がありました。
  • Alex Shnayder の回答は興味深い情報ですが、実際には質問の範囲には該当しません。このロギングを導入する目的の半分は、稼働中のシステムでの論理的問題とパフォーマンス上の問題の両方のデバッグを支援することです。当社の顧客は、高価で大規模なハードウェア構成なしでは再現が難しいことが多い多くの風変わりなシナリオに当社の製品を入れています。私の主な懸念は、「ログを記録しない」と「ログを記録する」の間の大きなタイミングの違いが、バグが発生しないような方法でシステムに影響を与える可能性があることです。結局、パフォーマンス低下の規模は大きいですが、程度は小さいので、問題ないことを願っています。
4

5 に答える 5

12

はい、log4xxx はトレースよりも低速です。通常、トレースはカーネルに近いツールですが、log4xxx ははるかに強力なツールです。個人的には、柔軟性があるので log4xxx を好みますが、あまり影響を与えないものが必要で、実稼働用のログが本当に必要ない場合は、デバッグのみのトレースで十分です。

注: .Net だけでなく、log4 ライブラリを使用するすべての言語にまったく同じことが適用されるため、log4xxx を使用します。

于 2008-10-14T14:31:26.913 に答える
4

私の経験から、ほとんどの場合、log4net のパフォーマンスは問題になりません。本当の問題は、実稼働システムで「何十万回もログを記録する」必要があるのはなぜなのかということです。
私が見ているように、本番環境では最小限のログのみを記録し (info nd は警告レベルである可能性があります)、(サイトで問題をデバッグする) 必要がある場合にのみ、デバッグ レベルでデバッグを有効にする必要があります。

于 2008-10-14T21:42:13.347 に答える
1

両方の長所を活用したい場合は、log4net を使用して aspnet トレーサーにもログを記録できます。ログの特定のイベントに関連するパフォーマンス統計を取得したい場合は、このオプションをオンにします。

于 2008-10-15T22:31:11.000 に答える
0

同じタスクに Log4Net を使用する場合と比較して、単純なファイルへの順次書き込みを比較するテストを実行しました。Log4Net は StreamWriter と比較して約 400 倍遅いです。しかし、少量のログエントリとデバッグには非常に便利です。

場合によっては、ロギングを別のスレッドに分離するための解決策かもしれません。

于 2013-05-14T11:53:49.333 に答える