Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Log4net - Logging to wrong appender

Tags:

c#

log4net

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

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

I have my config set up as follows:

  <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");

And in some other class:

private static readonly ILog logB = LogManager.GetLogger("LogB");
log.Debug("This should log to 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).

What is it I'm missing?

like image 654
FBryant87 Avatar asked Dec 08 '25 11:12

FBryant87


1 Answers

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>
like image 118
FBryant87 Avatar answered Dec 12 '25 20:12

FBryant87



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!