【问题标题】:Log4net EventLogAppender only works in root logger, why?Log4net EventLogAppender 仅适用于 root logger,为什么?
【发布时间】:2018-03-03 00:45:02
【问题描述】:

我有一个控制台应用程序,我正在尝试使用EventLogAppender 通过 log4net 登录到 Windows 事件日志。我也有两个RollingFileAppenders,但它们工作正常。

RollingFileAppenders 在根记录器中,配置如下:

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

EventLogAppenders 位于名为 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 中的附加程序正在工作。

如果我将EventLogAppenders 放到根目录,它们正在工作,但它们也在记录我不想记录到事件日志的 INFO 级别条目。

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

这里有两个EventLogAppenders,如果有人好奇的话:

<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 会这样做,如果有人有解决方案,将不胜感激!

干杯!

【问题讨论】:

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


    【解决方案1】:

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

    <logger Name="EventLogger">
    

    应该是

    <logger name="EventLogger">
    

    【讨论】:

    • 愚蠢的我...我头疼了两个小时才弄清楚是大写字母N 导致了这个问题...
    猜你喜欢
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 2015-09-03
    • 2011-11-18
    • 2016-01-23
    • 1970-01-01
    相关资源
    最近更新 更多