Log4net EventLogAppender只能在root logger中使用,为什么?

时间:2017-09-21 15:23:54

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

我有一个控制台应用程序,我尝试使用EventLogAppender使用 log4net 登录Windows事件日志。我也有两个RollingFileAppender,但这些都正常工作。

RollingFileAppender位于根记录器中,配置如下:

<root>
  <level value="DEBUG" />
  <appender-ref ref="RollingFileAppenderInfo" />      
  <appender-ref ref="RollingFileAppenderDebug" />
</root>

EventLogAppender位于名为EventLogger的记录器中,配置如下:

<logger Name="EventLogger">
  <level value="INFO" />
  <appender-ref ref="EventLogAppenderInfo"/>
  <appender-ref ref="EventLogAppenderError"/> 
</logger>

这样EventLogger从root继承appender。如果我使用EventLogger记录某些内容,它也会被写入日志文件。之所以我这样做,是因为我不想用所有信息条目垃圾邮件Windows事件日志,只是重要的条目。但我也想记录每一个错误。

这就是我获取记录器的方法:

private static readonly log4net.ILog eventLog = log4net.LogManager.GetLogger("EventLogger");

问题

像这样配置,使用eventlog对象记录任何级别的内容,log4net不会写入Windows事件日志,但它会写入日志文件,因此root中的appender正在工作

如果我将EventLogAppender放到根目录下,它们正在运行,但它们也记录了我不想记录到事件日志的INFO级别条目。

我不认为这是一个权限问题,源已经创建并且可以访问。

以下是两个EventLogAppender,如果有人好奇的话:

<appender name="EventLogAppenderInfo" type="log4net.Appender.EventLogAppender">
  <applicationName value="ApplicationName" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date{yyyy.MM.dd HH:mm:ss} [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
  </layout>
  <filter type="log4net.Filter.LevelMatchFilter">
    <levelToMatch value="INFO"/>
  </filter>
  <filter type="log4net.Filter.DenyAllFilter" />
</appender>

<appender name="EventLogAppenderError" type="log4net.Appender.EventLogAppender">
  <applicationName value="ApplicationName" />
  <layout type="log4net.Layout.PatternLayout">
    <IgnoresException value="False"/>
    <conversionPattern value="%date{yyyy.MM.dd HH:mm:ss} [%thread] %-5level %logger [%property{NDC}] - %message%newline%exception" />
  </layout>
  <filter type="log4net.Filter.LevelRangeFilter">
    <levelMin value="WARN" />
    <levelMax value="FATAL" />
  </filter>
</appender>

我无法想到为什么log4net这样做,如果有人有解决方案,我将不胜感激!

干杯!

1 个答案:

答案 0 :(得分:2)

我认为这是一个区分大小写的问题。

<!DOCTYPE html>
<html>
  <head>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
  </head>
  <body>
    <!-- Content -->
    <div id="t-container" class="container">
      <div class="char segment">T</div>
      <div class="line segment">his is some text.</div>
    </div>
    <div id="h-container" class="container">
      <div class="char segment">H</div>
      <div class="line segment">ere is some more text.</div>
    </div>

    <!-- Triggers -->
    <div id="triggers-container">
      <div id="t-trigger" class="trigger">T</div>
      <div id="h-trigger" class="trigger">H</div>
    </div>
  </body>
</html>

应该是

<logger Name="EventLogger">