【问题标题】:Two different FileAppender writing same logs message in two log files两个不同的 FileAppender 在两个日志文件中写入相同的日志消息
【发布时间】:2013-12-19 14:08:55
【问题描述】:

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

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

对不起,我的英语不好。

【问题讨论】:

    标签: c# windows-services log4net


    【解决方案1】:

    您对 Appenders 和 Loggers 感到困惑。一个日志本身可以有多个附加程序(例如,您可以有一个 SmtpAppender 和一个 FileAppender 用于错误日志,但您可能需要一个单独的 FileAppender 用于正常消息)。由于您只使用&lt;root&gt;... 配置根记录器,因此这是唯一使用LogManager.GetLogger 返回的日志,在您的配置中具有两个 FileAppenders。

    要配置多个单独的日志,请使用&lt;logger 标签,然后为每个日志指定附加程序:

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

    【讨论】:

    • 我并没有感到困惑,而是我的误解。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多