Question

I am getting a problem, when I configured two appenders and try to write a log message to one of the apender this also write the same message to another appenders file. Below is the configuration section,

<log4net>
<root>
  <level value="INFO" />
  <appender-ref ref="ErrorLog" />
  <appender-ref ref="PayWinSrvLog" />
</root>
<appender name="ErrorLog" type="log4net.Appender.FileAppender">
  <param name="File" value="E:\Webhome\FimFolders\BankWinserviceService\Error_Log.txt" />
  <param name="AppendToFile" value="true" />
  <maxSizeRollBackups value="0" />
  <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
  <maximumFileSize value="2MB" />
  <layout type="log4net.Layout.PatternLayout">
    <param name="ConversionPattern" value="%d [%t] %-5p %c %m%n" />
  </layout>
</appender>
<appender name="PayWinSrvLog" type="log4net.Appender.FileAppender">
  <param name="File" value="E:\Webhome\FimFolders\BankWinserviceService\PayWinSrv_Log.txt" />
  <param name="AppendToFile" value="true" />
  <maxSizeRollBackups value="0" />
  <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
  <maximumFileSize value="2MB" />
  <layout type="log4net.Layout.PatternLayout">
    <param name="ConversionPattern" value="%d [%t] %-5p %c %m%n" />
  </layout>
</appender>

and this is the only code I am using in Start method of my windows service project.

protected override void Start()
{
    ErrorLog = LogManager.GetLogger("ErrorLog");
    PayWinSrvLog = LogManager.GetLogger("PayWinSrvLog");
    XmlConfigurator.Configure();
    ErrorLog.Error("Error Message."); // this also get printed in PayWinSrv_Log.txt
}

I also include the line

[assembly: log4net.Config.XmlConfigurator(Watch = true)]

excuse me for my English.

Was it helpful?

Solution

You're getting confused with Appenders and Loggers. A log itself can have multiple appenders (e.g. you could have an SmtpAppender and a FileAppender for an error log, but you may want a separate FileAppender for normal messages). Since you only configure the root logger, using <root>..., then that is the only log that is ever returned using LogManager.GetLogger, which in your configuration has both FileAppenders.

To configure multiple, separate logs, use <logger tags, and then specify the appenders for each log:

<logger name="ErrorLog">
  <level value="INFO" />
  <appender-ref ref="ErrorLog" />
</logger>
<logger name="PayWinSrvLog">
  <level value="INFO" />
  <appender-ref ref="PayWinSrvLog" />
</logger>
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top