Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Log4net多个记录器到多个文件的问题_Log4net_Log4net Configuration - Fatal编程技术网

Log4net多个记录器到多个文件的问题

Log4net多个记录器到多个文件的问题,log4net,log4net-configuration,Log4net,Log4net Configuration,log4net版本:1.2.13.0 运行时版本:v4.0.30319 我在使用多个记录器和附加器时遇到一些问题。 我有一个根记录器,有3个appender,运行良好,但是当我配置多个其他记录器时,log4net似乎只注册app.config中指定的最后一个记录器中的appender 如果我将TaskSyncLogger作为最后一个记录器条目,则TaskSyncAppender将被识别 如果我将CalendarSyncLogger作为最后一个记录器条目,则CalendarSyncLogger将被

log4net版本:1.2.13.0 运行时版本:v4.0.30319

我在使用多个记录器和附加器时遇到一些问题。 我有一个根记录器,有3个appender,运行良好,但是当我配置多个其他记录器时,log4net似乎只注册app.config中指定的最后一个记录器中的appender

如果我将TaskSyncLogger作为最后一个记录器条目,则TaskSyncAppender将被识别 如果我将CalendarSyncLogger作为最后一个记录器条目,则CalendarSyncLogger将被识别

hierarchy.GetAppenders()中仅列出根记录器中的3个appender和上一个记录器条目中的appender

我的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>


我可以复制这一点,虽然我不能自信地说这肯定是一个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>