2009-11-20 64 views
1

我有一個Web應用程序,我希望在運行時添加或編輯企業庫日誌記錄。我熟悉如何完全編程配置EntLib日誌並通過配置文件,但我想使用兩者的組合。我希望通過配置文件設置一些基本TraceListeners,但是在應用程序啓動時,我想根據存儲在數據庫中的其他一些用戶設置有條件地添加一些Email TraceListeners。EntLib日誌記錄 - 在運行時添加/編輯TraceListeners

我目前的解決方案是打開web.config作爲配置對象,並手動修改web.config部分,但我想知道是否有一種方法來編程添加TraceListeners到當前配置的LogWriter(或者哪個)類。

有什麼建議嗎?

回答

2

您需要創建EmailTraceListener,然後將其添加到您的類別的TraceSources集合中。

在這個例子中,我有一個基本跟蹤監聽器指向一個平面文件。

<add fileName="trace.log" header="----------------------------------------" 
    footer="----------------------------------------" formatter="Text Formatter" 
    listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.FlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
    traceOutputOptions="None" filter="All" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.FlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
    name="FlatFile TraceListener" /> 

與類別源,如下所示:

<categorySources> 
     <add switchValue="All" name="General"> 
     <listeners> 
      <add name="FlatFile TraceListener" /> 
     </listeners> 
     </add> 
    </categorySources> 

然後使用代碼我能夠到EmailTraceListener添加到收藏TraceSources。

var emailTraceListener = new EmailTraceListener("[email protected]", "[email protected]", "Food", "Bar", 
                "smtp.foo.bar") {Name = "EmailTraceListener"}; 
    LogSource logSource; 
    Logger.Writer.TraceSources.TryGetValue("General", out logSource); 
    logSource.Listeners.Add(emailTraceListener); 


    var logEntry = new LogEntry {Message = "Test"}; 
    Logger.Write(logEntry); 

運行這個例子中,然後將生產與LogEntry信息的電子郵件,以及在日誌文件trace.log的一個條目

+0

完美的,正是我所期待的。謝謝 – 2009-11-20 20:10:07

+0

因此,添加監聽器只會在運行時添加它們,對吧?對於ASP.NET Web應用程序,它是否適用於每個用戶會話的整個持續時間? – 2013-12-17 15:59:08

0

要切換過濾器可以使用日誌寫/記錄器類的用getFilter方法檢索過濾器,然後對其進行處理。例如我們在我們的配置中有一個Logging Enabled Filter。我們可以切換此:

var filter = Logger.GetFilter<LogEnabledFilter>("<logging enabled filter name>"); 
filter.Enabled = true; // or false 

希望這會有所幫助。

+0

試過這個,但是'Logger.isLoggingEnabled()'總是返回初始加載的值 – Legends 2016-09-16 18:43:14