2015-10-15 106 views
1

log4net的版本問題v4.0.30319與log4net的多個記錄到多個文件

我有使用多個記錄器和附加目的地的一些問題。 我有一個根記錄器與3個Appender工作正常,但是當我配置多個其他記錄器log4net似乎只註冊從app.config中指定的最後一個記錄器的appender。

如果我把TaskSyncLogger作爲最後記錄條目TaskSyncAppender得到認可 如果我把CalendarSyncLogger作爲最後記錄條目CalendarSyncLogger得到認可

只能從根記錄和最後一個記錄條目添加器的3個追加程序中所列hierarchy.GetAppenders()

Hierarchy hierarchy = (log4net.Repository.Hierarchy.Hierarchy)LogManager.GetRepository(); 
var appenders = hierarchy.GetAppenders(); 

我的app.config

<appender name="MainFileAppender" type="log4net.Appender.FileAppender"> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date %-5level %logger- %message%newline %exception" /> 
    </layout> 
    <file value="Logs\logs.log" /> 
    <appendToFile value="true" /> 
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
</appender> 
<appender name="DebugAppender" type="log4net.Appender.DebugAppender"> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date %-5level - %message%newline %exception" /> 
    </layout> 
</appender> 
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date %-5level - %message%newline %exception" /> 
    </layout> 
</appender> 

<appender name="TaskSyncAppender" type="log4net.Appender.FileAppender"> 
    <appendToFile value="true"/> 
    <file value="Logs\logsTask.log" /> 
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date %-5level %logger- %message%newline %exception" /> 
    </layout> 
    <!-- 
    <filter type="log4net.Filter.LevelRangeFilter"> 
    <levelMin value="INFO" /> 
    <levelMax value="FATAL" /> 
    <filter type="log4net.Filter.DenyAllFilter" /> 
    </filter> 
    --> 
</appender> 

<appender name="CalendarSyncAppender" type="log4net.Appender.FileAppender"> 
    <appendToFile value="true"/> 
    <file value="Logs\logsCalendar.log" /> 
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date %-5level %logger- %message%newline %exception" /> 
    </layout> 
    <!-- 
    <filter type="log4net.Filter.LevelRangeFilter"> 
    <levelMin value="INFO" /> 
    <levelMax value="FATAL" /> 
    <filter type="log4net.Filter.DenyAllFilter" /> 
    </filter> 
    --> 
</appender> 

<root> 
    <level value="All" /> 
    <appender-ref ref="MainFileAppender" /> 
    <appender-ref ref="DebugAppender" /> 
    <appender-ref ref="ConsoleAppender" /> 
</root> 

<logger Name="CalendarSyncLogger" additivity="true"> 
    <level value="All"/> 
    <appender-ref ref="CalendarSyncAppender"/> 
</logger> 

<logger Name="TaskSyncLogger" additivity="true"> 
    <level value="All"/> 
    <appender-ref ref="TaskSyncAppender"/> 
</logger> 

進一步TaskSyncAppender不是寫什麼文件被創建,但雖然在MainFile附加目的地寫輸出它仍然是空的。

即時得到它像

public const string TaskSyncLogger = "TaskSyncLogger"; 

private static readonly ILog logTask = LogManager.GetLogger(LoggingStrings.TaskSyncLogger); 

回答

1

我可以重現這個,雖然我不能在說有信心,絕對是一個錯誤,那肯定是意外。

你可以解決它通過添加這最後記錄到文件:

<logger Name="WillNotBeUsed"> 
    <level value="Off"/> 
    <appender-ref ref="CalendarSyncAppender"/> 
    <appender-ref ref="TaskSyncAppender"/> 
</logger> 

之後,所有五個追加程序被加載。

+0

感謝您的回覆。這是解決這個問題的一種創造性方式;)但是你是否有任何線索爲什麼沒有寫任何東西? – FreeG

+0

那麼,如果他們沒有加載,會不會有輸出? – stuartd

+0

TaskAppender被加載 – FreeG