2017-07-21 77 views
1

我想要有2個日誌文件,通過在代碼中指定記錄器名稱來記錄我的應用程序。Log4net - 記錄到錯誤的appender

問題是它從來沒有記錄到我想要的目標文件,而是始終記錄到配置中的最後一個聲明的appender(本例中爲LogB)。

我有我的配置設置如下:

<log4net> 
    <logger name="LogA"> 
     <appender-ref ref="LogA"/> 
     <level value="DEBUG"/> 
    </logger> 
    <logger name="LogB"> 
     <appender-ref ref="LogB"/> 
     <level value="DEBUG"/> 
    </logger> 
    <appender name="LogA" type="log4net.Appender.FileAppender"> 
     <file value="E:\Logs\LogA.log" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="5" /> 
     <maximumFileSize value="10MB" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
     </layout> 
    </appender> 
    <appender name="LogB" type="log4net.Appender.FileAppender"> 
     <file value="E:\Logs\LogB.log" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="5" /> 
     <maximumFileSize value="10MB" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
     </layout> 
    </appender> 
    <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="LogA" /> 
    </root> 
    <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="LogB" /> 
    </root> 
    </log4net> 

然後在我的代碼,當我創建一個記錄:

private static readonly ILog logA = LogManager.GetLogger("LogA"); 
log.Debug("This should log to LogA"); 

而在一些其他類:

private static readonly ILog logB = LogManager.GetLogger("LogB"); 
log.Debug("This should log to LogB"); 

但是沒有任何事情記錄到LogA文件中,它總是輸出到LogB文件中(或者在配置文件中最後出現的任何內容G)。

這是什麼我錯過了?

回答

1

出於某種原因,它似乎並不喜歡多根節點。當我使用這個設置(保持appender節點)時,它工作:

<root> 
     <level value="ALL" /> 
     <appender-ref ref="SomeRootAppender" /> 
    </root> 
    <logger additivity="false" name="LogA"> 
     <level value="DEBUG"/> 
     <appender-ref ref="LogA" /> 
    </logger> 
    <logger additivity="false" name="LogB"> 
     <level value="DEBUG"/> 
     <appender-ref ref="LogB" /> 
    </logger>