0

I want to have a different log for a specific part of a program, hence I created a new logging system in C#.NET using log4net. I have created a new node in app.config same as the one that is existing (default logs are also required.) The app.config looks something like this.

   <configuration>
    <configSections>

    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
  <section name="partialfilelog" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>

</configSections>

<log4net>
    <root>
        <level value="DEBUG" />
        <appender-ref ref="FileAppender" />
    </root>

     <appender name="FileAppender" type="log4net.Appender.RollingFileAppender">
        <file type="log4net.Util.PatternString" value="C:/Logs/DefaultLog.log" />
        <appendToFile value="true" />
        <rollingStyle value="Size" />
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <maximumFileSize value="10MB" />
        <maxSizeRollBackups value="-1" />
        <preserveLogFileNameExtension value="true" />
        <staticLogFileName value="true" />
        <layout type="log4net.Layout.PatternLayout">
                   <conversionPattern value="%-7level   %date   %property{MemberName}   
                  %property{SourceLineNumber}   %message   %exception %newline" />
        </layout>
        <filter type="log4net.Filter.LevelRangeFilter">
            <param name="LevelMin" value="DEBUG"/>
            <param name="LevelMax" value="ERROR"/>
        </filter>
    </appender>

  </log4net>
<customLog>
  <log4net>
  <root>
     <level value="ALL" />
     <appender-ref ref="PartialFileAppender" />
  </root>
  <appender name="PartialFileAppender" type="log4net.Appender.RollingFileAppender">
     <file type="log4net.Util.PatternString" value="C:/Logs/CustomLog.log" />
     <appendToFile value="true" />
     <rollingStyle value="Size" />
     <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
     <maximumFileSize value="10MB" />
     <maxSizeRollBackups value="-1" />
     <preserveLogFileNameExtension value="true" />
     <staticLogFileName value="true" />
     <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%-7level   %date   %property{MemberName}   
        %property{SourceLineNumber}   %message   %exception %newline" />
     </layout>
     <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="DEBUG"/>
        <param name="LevelMax" value="ERROR"/>
     </filter>
  </appender>
  </log4net>
  </customLog>
  </configuration>

I have created this custom node which gets initialized like this.

 private readonly ILog _logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

This logger configuration is getting done correctly after opening the app.config file.

if (File.Exists(appconfigpath))
     {
        xmlDocument.Load(File.OpenRead(appconfigpath));
        log4net.Repository.ILoggerRepository loggerRepository = log4net.LogManager.CreateRepository(
            Assembly.GetEntryAssembly(), typeof(log4net.Repository.Hierarchy.Hierarchy));
        log4net.Config.XmlConfigurator.Configure(loggerRepository, 
        (XmlElement)xmlDocument.SelectSingleNode("//partialfilelog/log4net"));
        xmlDocument = null;
     }

The new customlog file is getting created. But whenever I call the method to write a log in this file, the logs are getting created in the defaultlog file (These paths are provided in the appender inside value [value="C:/Logs/CustomLog.log"] like this.)

I am configuring both the logger from startup.cs file. Can anyone help me in understanding what is the problem here? Why my logs are getting generated in wrong file? What am I missing or doing wrong?

1 Answers1

0

Your config file still contains the default value.

Change <file type="log4net.Util.PatternString" value="C:/Logs/DefaultLog.log" /> to <file type="log4net.Util.PatternString" value="YourPathHere" />

Proliges
  • 371
  • 4
  • 26
  • Basically I have created two different nodes in app.config file. The second one has the path to custom file. I think this is the problem, is it allowed to have two different nodes stating configuration for log4net? – Hope Michaelson Dec 11 '20 at 09:32
  • @hopeMichaelson you are using an custom file appender in a different node. I'm not 100% sure but I don't think that is gonna work. You should create 2 file appenders in the same node. As stated here https://stackoverflow.com/questions/1372435/configure-log4net-to-write-to-multiple-files – Proliges Dec 14 '20 at 13:00