log4net多个附加器,写入事件查看器

7

我正在使用log4net记录日志,我有两个appender,一个是文件appender,另一个是事件日志appender。我已经在注册表编辑器中注册了应用程序,问题是现在两个logger都写入了事件查看器。我需要fileAppender写入文件,eventLogAppender则在事件查看器中显示。

<log4net>
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
  <file value="file.log"/>
  <appendToFile value="false"/>
  <layout type="log4net.Layout.PatternLayout">
    <header value="Logging Start &#xD;&#xA;"/>
    <footer value="Logging End &#xD;&#xA;"/>
    <conversionPattern value="%date [%thread] %-5level %logger: %message%newline"/>
  </layout>
</appender>

<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">

  <param name="ApplicationName" value="eventlog" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
  </layout>
</appender>

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

然后在代码中。
private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
// private static readonly ILog log = LogManager.GetLogger("LogFileAppender");
private static readonly ILog logEvents = LogManager.GetLogger("EventLogAppender");

我尝试了不同的方法,但都没有起作用,请问有解决方案吗?

谢谢!


1
你是想让每个目标都可以写入不同的内容吗?通常情况下,使用log4net中的多个appender可以通过一次方法调用将相同的内容写入多个目的地。 - dodexahedron
是的,我希望使用文件附加器进行更详细的日志记录,然后在事件查看器中进行一些日志记录。希望我表述清楚了。 - aDev
你的配置中没有任何记录器元素,因此按照你设置的方式无法实例化多个。答案即将到来... - dodexahedron
1个回答

14
为了使用多个ILog实例与log4net并记录不同的信息到每个实例,您必须在配置文件的log4net部分中配置至少两个Logger元素。
在您的情况下,您有两个目标 - 文件和事件日志。我将称它们为FileLogger和EventLogger。
以下是您需要在log4net部分中添加的附加配置示例:
<logger name="FileLogger">
  <level value="ALL" />
  <appender-ref ref="LogFileAppender" />
</logger>

<logger name="EventLogger">
  <level value="ALL" />
  <appender-ref ref="EventLogAppender" />
</logger>

然后,要在代码中使用每个实例,可以这样实例化:

private static readonly ILog fileLogger = LogManager.GetLogger("FileLogger");
private static readonly ILog eventLogger = LogManager.GetLogger("EventLogger");

请注意,appender元素的ref属性与您已经配置的appenders的name属性匹配,并且传递给GetLogger的名称与logger元素的name属性匹配。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接