Log4net - 记录到错误的appender

时间:2017-07-21 09:42:27

标签: c# log4net

我试图拥有2个日志文件,我的应用程序通过在代码中指定记录器名称来记录。

问题是它永远不会记录到我尝试定位的文件,而是始终记录到配置中的最后一个声明的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文件(或者在配置中最后出现的任何内容)。

我错过了什么?

1 个答案:

答案 0 :(得分:2)

由于某种原因,它似乎不喜欢多个根节点。当我使用这个设置代替(保留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>