两个不同的FileAppender在两个日志文件中写入相同的日志消息

时间:2013-12-19 14:08:56

标签: c# windows-services log4net

我遇到了问题,当我配置两个appender并尝试将日志消息写入其中一个apender时,这也会将相同的消息写入另一个appenders文件。以下是配置部分,

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

这是我在Windows服务项目的Start方法中使用的唯一代码。

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
}

我还包括

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

对不起我的英语。

1 个答案:

答案 0 :(得分:2)

你对Appender和Loggers感到困惑。日志本身可以有多个appender(例如,你可以有一个SmtpAppender和一个FileAppender用于错误日志,但你可能想要一个单独的FileAppender用于普通消息)。由于您只使用<root>...配置根记录器,因此这是使用LogManager.GetLogger返回的唯一日志,在您的配置中该日志都包含两个FileAppender。

要配置多个单独的日志,请使用<logger标记,然后为每个日志指定appender:

<logger name="ErrorLog">
  <level value="INFO" />
  <appender-ref ref="ErrorLog" />
</logger>
<logger name="PayWinSrvLog">
  <level value="INFO" />
  <appender-ref ref="PayWinSrvLog" />
</logger>