首页 > 解决方案 > Log4Net。限制 RollingFileAppender 在 Windows 事件查看器中记录事件

问题描述

我们使用 Log4Net 2.0.8 版进行日志记录,它被配置为登录文件。RollingFileAppender 被配置为 appender。它将事件完美地记录到文件中,但我们发现它也记录到 Windows 事件日志中。我们想知道是否有可能以某种方式关闭记录到 Windows 事件日志

在此处输入图像描述

下面是Log4Net的配置

.net 4.7.1 是版本。

<log4net>
  <root>
    <level value="ALL" />
  </root>
  <logger name="zzzzzz
    <level value="ALL" />
    <appender-ref ref="InfoAppender" />
    <appender-ref ref="DebugAppender" />
    <appender-ref ref="WarningAppender" />
    <appender-ref ref="ErrorAppender" />
  </logger>

  <logger name="NServiceBus">
    <level value="INFO" />
    <appender-ref ref="InfoAppender" />
    <appender-ref ref="DebugAppender" />
    <appender-ref ref="WarningAppender" />
    <appender-ref ref="ErrorAppender" />
  </logger>

  <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
    <encoding value="utf-8" />
    <file value="C:\Logs\Product\\" />
    <appendToFile value="true" />
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />

    <rollingStyle value="Composite" />
    <datePattern value="yyyy-MM-dd\\\\'Product.Error.txt'" />
    <maximumFileSize value="5Mb" />
    <maxSizeRollBackups value="-1" />
    <!-- No limit on roll backs -->
    <staticLogFileName value="false" />
    <!-- Creates the folder for the day before logging for that day starts -->

    <layout type="zzzzz.MyOrders.Utilities.Logging.Log4Net.ExtendedPatternLayout, zzzzzz.MyOrders.Utilities.Logging">
      <conversionPattern value="Product.WebApi - %date [%thread] [%correlationId] %-5level - %message%newline" />
    </layout>
    <filter type="log4net.Filter.LevelRangeFilter">
      <levelMin value="ERROR" />
      <acceptOnMatch value="true" />
    </filter>
    <filter type="log4net.Filter.DenyAllFilter" />
  </appender>
</log4net>

谢谢!

标签: c#.netlog4netrollingfileappender

解决方案


我们找到了问题的答案,并认识到该问题是不正确的。所以我们将记录器的包装器封装在 nuget 包中,它包装了 log4net 和手写的“EventLogLogger”

包装器中的客户端代码看起来像

    private void WriteLogMessageToLogs(LogMessageType logMessageType, LogMessage logMessage)
    {         
        foreach (var loggingProvider in this.loggingProviders)
        {
            loggingProvider.AddLogEntry(logMessage, logMessageType);
        }
    }

很抱歉打扰所有与会者,Log4Net 不是这背后的人。


推荐阅读