2017-01-26 35 views
1

我知道這篇文章禁用log4net記錄器:Stackoverflow: How to completely disable log4net如何完全禁用記錄器

但我不知道logger是否實際上是無效的,當我用這樣的代碼:

log.debug("some debug text"); 

我想一個額外的解決方案來像在配置文件中的配置開關(的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

我會指出,使用日誌沒有太多的意義。如果您正在記錄正文,IsDebugEnabled。如果你的日誌命令正在調用你正在嘗試避免的屬性或方法,它會變得有用。 – sgmoore