Log4net多个记录器到多个文件的问题
log4net版本:1.2.13.0 运行时版本:v4.0.30319 我在使用多个记录器和附加器时遇到一些问题。 我有一个根记录器,有3个appender,运行良好,但是当我配置多个其他记录器时,log4net似乎只注册app.config中指定的最后一个记录器中的appender 如果我将TaskSyncLogger作为最后一个记录器条目,则TaskSyncAppender将被识别 如果我将CalendarSyncLogger作为最后一个记录器条目,则CalendarSyncLogger将被识别 hierarchy.GetAppenders()中仅列出根记录器中的3个appender和上一个记录器条目中的appender 我的app.configLog4net多个记录器到多个文件的问题,log4net,log4net-configuration,Log4net,Log4net Configuration,log4net版本:1.2.13.0 运行时版本:v4.0.30319 我在使用多个记录器和附加器时遇到一些问题。 我有一个根记录器,有3个appender,运行良好,但是当我配置多个其他记录器时,log4net似乎只注册app.config中指定的最后一个记录器中的appender 如果我将TaskSyncLogger作为最后一个记录器条目,则TaskSyncAppender将被识别 如果我将CalendarSyncLogger作为最后一个记录器条目,则CalendarSyncLogger将被
<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>
我可以复制这一点,虽然我不能自信地说这肯定是一个bug,但这肯定是出乎意料的 您可以通过将最后一个记录器添加到您的文件来解决此问题:
<logger Name="WillNotBeUsed">
<level value="Off"/>
<appender-ref ref="CalendarSyncAppender"/>
<appender-ref ref="TaskSyncAppender"/>
</logger>
之后,所有五个appender都将加载。感谢您的回复。这是解决这个问题的创造性方法;)但是你知道为什么附加程序没有写入任何内容吗?如果没有加载,将不会有任何输出?TaskAppender已加载当日志文件无法写入但配置已加载时,通常是权限问题创建文件时,MainFileAppender的日志文件位于同一目录中
public const string TaskSyncLogger = "TaskSyncLogger";
private static readonly ILog logTask = LogManager.GetLogger(LoggingStrings.TaskSyncLogger);
<logger Name="WillNotBeUsed">
<level value="Off"/>
<appender-ref ref="CalendarSyncAppender"/>
<appender-ref ref="TaskSyncAppender"/>
</logger>