Log4net-登录到错误的附加程序 [英] Log4net - Logging to wrong appender

查看:51
本文介绍了Log4net-登录到错误的附加程序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试拥有2个日志文件,而我的应用程序通过在代码中指定一个记录器名称来记录其中一个.

I'm trying to have 2 log files, with my application logging to either by specifying a logger name in code.

问题是它从不记录到我要定位的文件,而是始终记录到配置中最后声明的附加程序(在这种情况下为LogB).

The problem is it never logs to the file I'm trying to target, instead it always logs to the last declared appender in the config (LogB in this case).

我的配置如下:

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

然后在创建记录器时输入我的代码:

Then in my code when I create a logger:

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文件中(或任何出现在配置最后的东西).

But nothing is ever logged to the LogA file, it's always output to the LogB file (or whatever happens to appear last in the config).

我想念的是什么?

推荐答案

出于某种原因,它似乎不喜欢多个根节点.当我改用此设置(保留附加节点)时,它起作用了:

For some reason it didn't appear to like the multiple root nodes. When I used this setup instead (keeping the appender nodes), it worked:

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

这篇关于Log4net-登录到错误的附加程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆