2010-09-15 81 views
1

我試圖在我的ASP.NET網站中創建一個安裝程序,該安裝程序允許我在任何時候運行應用程序時啓用/禁用日誌記錄。我想你們中的一些人已經做了這樣的事情。如何啓用/禁用ASP.NET上的日誌記錄

這裏是我想要做的要點:

if(ShouldBeLogging) 
logger.Info("helloooooo there"); 

那麼你會如何建立布爾值ShouldBeLogging要能上,而該網站沒有得到任何正在運行的開/關被打開嚴重的性能缺陷(看看它將如何頻繁訪問)?

我在考慮把東西放在web.config中,但是如果我想打開它,不會改變那個踢我的用戶會話嗎?

謝謝!

+0

關於最後一點 - 它取決於您使用的會話存儲機制。如果你使用InProc(會話數據存儲在內存中),那麼是的。如果您使用像SQL數據庫那樣更持久的存儲會話數據的內容,那麼所有現有的用戶會話都將在應用程序域重新啓動時保留下來,這是由更改web.config引起的。 – Tomas 2010-09-15 12:58:06

回答

0

我決定去支持這一確切功能log4net的。你可以在你的assemblyinfo.cs中插入一行:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "config\\log4net.config", Watch = true)] 

它會告訴它觀察配置文件的變化。那麼你就可以在程序執行期間的任何時間設置在配置XML的層次節點和日誌記錄將開/關,只要你使用以下檢查你的代碼打開:

if(log.IsDebugEnabled) 
    log.Debug("write a debug message to the logger"); 

http://logging.apache.org/log4net/release/manual/internals.html欲瞭解更多信息。

0

是的,對web.config的更改會導致應用程序自身重新啓動,並且會話會因您的會話存儲而丟失。

布爾檢查的性能開銷是最小的,但它是一個維護的噩夢。

爲什麼不使用Enterprise Library Logging Application Block,這已經是外部可配置的?一種你正在嘗試做的如果你決定你真的會在這裏Checking Filter Status before Logging

參考要切換記錄如果通過檢查一個簡單的僞解決方案是將值添加到您的web.config的appSettings

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

,然後在全球第 公共靜態只讀布爾LoggingEnabled {獲得;}

Application_Start(..){ 
     string log = ConfigurationSettings.AppSettings["DiagnosticLogging"]; 
     LoggingEnabled = false; 
     if(!string.IsNullOrEmpty(log)){ 
      if(!boolean.TryParse(out LoggingEnabled)){ 
        //bad application setting.. handle 
       } 
     }  
    } 
0

診斷內置/跟蹤可能是您的需求的最佳契合,即見 http://www.beansoftware.com/ASP.NET-Tutorials/Tracing-ASP.NET.aspx

樣品的web.config:

<configuration> 
    <appSettings/> 
    <connectionStrings/> 
    <system.web> 
     <compilation debug="false" /> 
     <authentication mode="Windows" /> 
     <trace enabled ="true" pageOutput ="false" requestLimit ="20" traceMode ="SortByTime " /> 


</system.web>