【问题标题】:log4net multiple appenders, writing to event viewerlog4net 多个附加程序,写入事件查看器
【发布时间】:2023-03-28 00:58:02
【问题描述】:

我正在使用 log4net 进行日志记录,我有两个 appender 一个文件和另一个 eventlog appender。我在注册表编辑器中注册了应用程序,问题现在两个记录器都在事件查看器中写入。我需要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");

我尝试了不同的方法,但没有人在工作,有什么解决方案吗?

谢谢!

【问题讨论】:

  • 您是否正在尝试为每个目标编写不同的内容?通常,您在 log4net 中使用多个附加程序通过一个方法调用将相同的内容写入多个目标。
  • 是的,我想使用 fileappender 进行更详细的日志记录,然后在事件查看器中进行一些日志记录,我希望我说清楚..
  • 您的配置中没有任何记录器元素,因此无法按照您设置的方式实例化多个。很快就会有答案...

标签: c# log4net log4net-configuration log4net-appender


【解决方案1】:

为了在 log4net 中使用多个 ILog 实例并向每个实例记录不同的信息,您必须在配置文件的 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 属性与您已配置的 appender 的 name 属性相匹配,并且传递给 GetLogger 的名称与 logger 元素的 name 属性相匹配。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-11
    相关资源
    最近更新 更多