2013-06-03 65 views
1

我想在全球日誌文件中使用log4net的,一個,而另一個用於特定用戶的文件,爲了這個,我設置帕拉姆在附加器這樣日誌在兩個不同的文件log4net的

<param name="File" value="D:\Projects\Web\Web\Services\Log\%property{LogFileName}" /> 
寫在兩個不同的文件日誌

和確定這樣的函數

public void AddInfo(string message) 
{ 
    log4net.GlobalContext.Properties["LogFileName"] = this.UserId + ".txt"; 
    log4net.Config.XmlConfigurator.Configure(); 
    Logger.Info(message); 

    log4net.GlobalContext.Properties["LogFileName"] = "ServiceLog.txt"; 
    log4net.Config.XmlConfigurator.Configure(); 
    Logger.Info(message);   
} 

這一切都是努力的過程,每一個日誌是寫在兩個不同的文件成功。

我擔心的是,如果我們考慮性能,方法是否正確?

對於每一個日誌都會配置log4net兩次,會對性能產生負面影響嗎?

回答

1

創建兩個文件附加目的地 - 一個用於用戶登錄(與文件名模式),另一個用於全局日誌:

<appender name="UserFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file type="log4net.Util.PatternString" value="%property{userId}.txt" /> 
    ... 
</appender> 
<appender name="GlobalFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file value="log.txt" /> 
    ... 
</appender> 
<root> 
    <level value="DEBUG" /> 
    <appender-ref ref="UserFileAppender" /> 
    <appender-ref ref="GlobalFileAppender" /> 
</root> 

然後每個用戶配置log4net的只有一次:

GlobalContext.Properties["userId"] = "Bob"; 
XmlConfigurator.Configure(); 

而且在您的應用程序中使用記錄器。

+0

謝謝!一個好的解決方案,但我想寫日誌到這兩個文件,所以如果我爲用戶配置它,那麼它不會寫日誌到全局文件,不是?或者我錯過了什麼? –

+1

不,log4net會將日誌事件寫入所有爲當前記錄器和事件匹配級別配置的appender。所以,在這種情況下,事件將被傳遞給兩個appender。順便說一句,有一些方法可以避免爲每個用戶配置。等一下,我會更新答案。 –

+0

@PawanNogariya查看[RollingPatternFileAppender](http://mysite.verizon.net/vze14bhji/)我認爲您可以將其用於用戶日誌文件。也考慮將用戶日誌寫入數據庫。 –