2017-01-26 13 views
1

この投稿については、log4netロガーを無効にすることを知っています:Stackoverflow: How to completely disable log4netロガーを完全に無効にする方法

しかし、私はこのようなコードを使用する場合、ロガーは、実際には非アクティブであるかどうかを疑問に思う:

log.debug("some debug text"); 

私は、configファイル(app.configを)に設定スイッチのようなものを設定するために、余分な解決策を考えます、それは例えば、出力ログのソースコードの一部を省略するか、使用するために私のプログラムを合図:

すなわち私のapp.configをソースコードで、その後

<appSettings> 
    <add key="enableLog" value="true"/> 
</appSettings> 

: ...私はより高いパフォーマンスのためのソリューションのような種類を必要とするか、それは愚かであるか、あなたはどう思いますか

if (enableLog) log.debug("some debug text");

設定から値を決定し、ローカル変数に入れて...アイディア?

+4

マイクロ最適化のような音です。それは、あなたに正当な理由がない限り、やりたくないことです。 –

+0

[log4netを完全に無効にする方法]の複製の可能性があります。(http://stackoverflow.com/questions/14621083/how-to-completely-disable-log4net) – Peter

答えて

3

これはまさにlog4netの機能です。お電話の際に

log.debug( "some debug text");

それは内部的に

<log4net threshold="OFF" /> //it could also be ALL, DEBUG, INFO etc.. 

ためlog4net.xml設定ファイルをチェックし、それがオフになっている場合、それは伐採とそれ以上は続行されません。

私の意見では、log4netは既にそれを行っているので、このような最適化の必要はありません。私は、チェックの余分な層がパフォーマンス上の顕著な改善をもたらすことはないと言います。これはアプリケーションの内容と1ミリ秒が重要であるかどうかによって異なります。私はlog4netがかなり最適化されていると私のプロジェクトでそのような最適化を行う必要はなかったと言うこともできます。

2

app.config設定の使用を考えているとすれば、log4netにも同様のオプションが用意されていると思います。ログレベルを設定することで、log4net設定で制御するIsDebugEnabledフラグをいつでもチェックすることができます。

if (Log.IsDebugEnabled) 
    Log.DebugFormat("My text"); 

とにかくすべてのログを防ぐためにフィルタを使用することもできます。 と同じようなもの

<filter type="log4net.Filter.DenyAllFilter" /> 

希望します。

+0

Logを使用することにはあまり意味がないことを指摘します。ストレートテキストをロギングする場合は、IsDebugEnabled。あなたのログコマンドが、あなたが避けようとしているプロパティやメソッドを呼び出すのが便利なところです。 – sgmoore

関連する問題