3

ロギングにはlog4cxxを使用します。ただし、ロギングにより、パフォーマンスのオーバーヘッドが発生する可能性があり、これを最小限に抑える必要があります。

コードからすべてのログステートメントを削除する以外に、オーバーヘッドを最小限に抑えるために(実行時またはコンパイル時に)ログをオフにするにはどうすればよいですか?

ドキュメントには次のように記載されています

ユーザーは、次のパフォーマンスの問題に注意する必要があります。

ロギングがオフの場合のロギングパフォーマンス。

ロギングが完全にオフになっている場合、または一連のレベルに対してのみオフになっている場合、ログ要求のコストは、メソッドの呼び出しと整数の比較で構成されます。LOG4CXX_DEBUGおよび同様のマクロは、要求が有効になっていない場合に不要な式の評価を抑制します。

しかし、それを完全にオフにする方法は?これは達成できる最小のオーバーヘッドですか?

4

1 に答える 1

4

コンパイル時にすべてのロギングを本当に無効にしたい場合は、log4cxxマクロを何にも再定義しないでください。

#define LOG4CXX_TRACE(logger, expression)    
#define LOG4CXX_DEBUG(logger, expression)    
#define LOG4CXX_INFO(logger, expression)   
#define LOG4CXX_WARN(logger, expression)    
#define LOG4CXX_ERROR(logger, expression)    
#define LOG4CXX_FATAL(logger, expression) 

オーバーヘッドがゼロ。ランタイムの場合、常にいくらかのコストが発生する必要があります。簡単に見てみると、実際には、ドキュメントに記載されているよりもわずかにオーバーヘッドが大きくなり、通常は追加の仮想メソッド呼び出しが必要になります。これは基本的にこのライブラリを使用した最小のオーバーヘッドですが、リンク時間の最適化などを使用してメソッド呼び出しのオーバーヘッドを削除すると、非常に小さな改善が得られる場合があります。

于 2013-02-08T11:34:48.987 に答える