2010-06-09 81 views
16

我使用RollingFileAppender進行登錄到一個conversionPattern一個文件中的一些信息(在web.config)看起來像這樣爲每個日誌節的標題:Log4net可以有多個appender寫入同一個文件嗎?

<conversionPattern value="%date - %property{userId} - %property{method}%newline--------------------------------%newline%message%newline%newline"/> 

我想登錄在這個標題下的細節作爲項目符號。我目前正試圖用另一種RollingFileAppender進行,它記錄到同一文件只是一個破折號的簡單conversionPattern,就像這樣:

<conversionPattern value="- %message%newline"/> 

但這些消息不會使它到日誌文件。我使用Log.Info()作爲標題,使用Log.Debug()作爲項目符號點,並在各自的日誌級別上篩選每個appender。我正在嘗試做什麼?或者是否有更好的方法將標題和詳細信息從log4net中獲取到日誌文件中?

回答

32

是的,你可以有兩個log4net appender附加(寫入)到同一個日誌文件。

您需要將下面一行在每個附加目的地的:

<lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 

這將使log4net的使用最小的鎖定模式,允許多個進程寫入同一文件。

下面是一個使用了兩個附加目的地寫同一個日誌文件的示例XML:

<log4net debug="false"> 
<appender name="RollingLogFileAppender1" type="log4net.Appender.RollingFileAppender"> 
    <!-- this configures a log for the application messages --> 
    <file value="TestLog.log" /> 
    <appendToFile value="true" /> 
    <!-- next line uses a minimal locking model that allows multiple processes to write to the same file --> 
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
    <rollingStyle value="Size" /> 
    <maxSizeRollBackups value="10" /> 
    <maximumFileSize value="10MB" /> 
    <staticLogFileName value="true" /> 
    <!-- make the most recent log the highest numbered log --> 
    <countDirection value="1" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%-5level %date{MM-dd-yyyy HH:mm:ss.ff} [%property{NDC}] %message%newline [Thread: %thread] %c{1} Method:%method(%file{1}, Line:%line) %newline" /> 
    </layout> 
    <!-- The following two filters insure only log requests of 
     version '1' use this Appender --> 
</appender> 
<appender name="RollingLogFileAppender2" type="log4net.Appender.RollingFileAppender"> 
    <file value="TestLog.log" /> 
    <appendToFile value="true" /> 
    <!-- next line uses a minimal locking model that allows multiple processes to write to the same file --> 
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
    <rollingStyle value="Size" /> 
    <maxSizeRollBackups value="10" /> 
    <maximumFileSize value="10MB" /> 
    <staticLogFileName value="true" /> 
    <!-- make the most recent log the highest numbered log --> 
    <countDirection value="1" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%-5level %date{MM-dd-yyyy HH:mm:ss.ff} [%property{NDC}] [Thread: %thread] %c{1} Method:%method(%file{1}, Line:%line) %newline%message" /> 
    </layout> 
</appender> 
<root> 
    <level value="DEBUG" /> 
    <appender-ref ref="RollingLogFileAppender1" /> 
    <appender-ref ref="RollingLogFileAppender2" /> 
</root> 

這可以在Apache文檔在這裏找到: Apache Log4Net Docs 此頁'上只要搜索相同的文件'。

希望這會有所幫助。

+0

注意只有最新版本的log4net有這個lockingModel Xml設置和MinimalLock類如果你使用舊版本,沒有錯誤會拋出,但它不會工作。 – 2015-01-05 09:34:37

1

你可以認識到,如果log4net在visual studio上檢查輸出窗口時有任何問題。那裏的庫日誌錯誤,對於檢測配置錯誤非常有用。

+0

不幸的是,沒有錯誤報告可以幫助我:( – adam0101 2010-06-10 15:52:49

+0

你執行代碼來配置log4net,對嗎? – 2010-06-10 16:46:08

相關問題