2013-08-28 59 views
1

我有一個奇怪的問題。我試圖創建多個滾動文件appenders引用每個人相同的文件,但一次只使用其中一個appender。Log4Net,一次不能使用多個RollingFileAppenders

的事情是,如果我聲明我的appender是這樣的:

<appender name="APP1" type="log4net.Appender.RollingFileAppender"> 
    <file value="C:\Log.txt" /> 
    <layout type="log4net.Layout.PatternLayout,log4net"> 
    <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - message%newline" /> 
    </layout> 
</appender> 
<logger name="APP1" additivity="false"> 
    <level value="DEBUG" /> 
    <appender-ref ref="APP1" /> 
</logger> 
<appender name="APP2" type="log4net.Appender.RollingFileAppender"> 
    <file value="C:\Log.txt" /> 
    <layout type="log4net.Layout.PatternLayout,log4net"> 
    <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - message%newline" /> 
    </layout> 
</appender> 
<logger name="APP2" additivity="false"> 
    <level value="DEBUG" /> 
    <appender-ref ref="APP2" /> 
</logger> 

然後我的「APP1」記錄寫入文件沒有問題,但不是「APP2」記錄器一樣,如果它是唯一獲得第一個記錄器。顯然,如果我讓這兩個記錄器開關的地方,一切工作爲「APP 2」,而不是「APP1」

此外,當追加失敗,我可以在調試窗口中看到這一點:

log4net: Opening file for writing [C:\Log.txt] append [True] 
log4net: Opening file for writing [C:\Log.txt] append [True] 

我想,這意味着它正在追加,但奇怪的是它並沒有這樣做。在工作場景中,我看不到那些日誌。 任何提示是非常感謝! 感謝您的時間

回答

1

也許你可以寫這樣的:

<root> 
    <level value="DEBUG" /> 
    <appender-ref ref="APP1" /> 
    <appender-ref ref="APP2" /> 
</root> 

下面是一個使用多個附加目的地的配置文件。 可以在http://logging.apache.org/log4net/release/manual/configuration.html

<log4net> 
<appender name="Console" type="log4net.Appender.ConsoleAppender"> 
    <layout type="log4net.Layout.PatternLayout"> 
     <!-- Pattern to output the caller's file name and line number --> 
     <conversionPattern value="%5level [%thread] (%file:%line) - %message%newline" /> 
    </layout> 
</appender> 

<appender name="RollingFile" type="log4net.Appender.RollingFileAppender"> 
    <file value="example.log" /> 
    <appendToFile value="true" /> 
    <maximumFileSize value="100KB" /> 
    <maxSizeRollBackups value="2" /> 

    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%level %thread %logger - %message%newline" /> 
    </layout> 
</appender> 

<root> 
    <level value="DEBUG" /> 
    <appender-ref ref="Console" /> 
    <appender-ref ref="RollingFile" /> 
</root> 

覺得這有可能是使用多個附加目的地,但你不能使用多個FileAppenders(或RollingFileAppenders)登錄同一個文件。 所以,如果您更改APP2 appender登錄不同的文件,它的工作原理。

<appender name="APP2" type="log4net.Appender.RollingFileAppender"> 
    <file value="C:\Log2.txt" /> 
    <layout type="log4net.Layout.PatternLayout,log4net"> 
    <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - message%newline" /> 
    </layout> 
</appender> 

問題也許log4net的不能在同一時間通過不同FileAppenders訪問同一個文件。

+0

我沒有在同一時間使用多個記錄器,而且我需要記錄器名稱來知道使用哪一個。我嘗試拆分appenders和伐木工,但它也沒有工作... – user2541621

相關問題