【问题标题】:log4net filter doesnt worklog4net 过滤器不起作用
【发布时间】:2016-08-15 11:43:06
【问题描述】:

我正在使用 log4net,我正在尝试使用过滤器,以便只有一个附加程序可以写入特定文件。

谁能告诉我为什么这不起作用?我只希望名为“ErrorLogFileAppender”的附加程序写入文件..

<appender name="ErrorLogFileAppender" type="log4net.Appender.RollingFileAppender">
   <file value="..\\WebErrors.log" />
   <appendToFile value="true" />
   <rollingStyle value="Size" />
   <maxSizeRollBackups value="2" />
   <maximumFileSize value="10MB" />
   <staticLogFileName value="true" />
   <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
   <layout type="log4net.Layout.PatternLayout">
     <param name="ConversionPattern" value="%d [%t] %-5p %logger{1} %m%n" />
   </layout>

   <filter type="log4net.Filter.LoggerMatchFilter">
     <!-- allows this sub-namespace to be logged... -->
     <loggerToMatch value="ErrorLogFileAppender" />
   </filter>

</appender>

这就是我获取应该能够写入文件的记录器的方式:

private static ILog _fileLogger = LogManager.GetLogger("ErrorLogFileAppender");

但是这个记录器(在另一个类中使用)也可以写入同一个文件,这是错误的:

private static ILog _log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

【问题讨论】:

  • FWIW,我认为你偏离了 log4net 设计为使用这种方法的方式 - 你的代码不应该知道它正在记录到 ErrorLogFileAppender,它应该只在右侧登录级别 - 担心您的配置中实际记录的内容和位置。
  • 好主意。会看一些变化。但是我的过滤器问题仍然存在
  • 哦,是的,如果您只想记录来自特定组件的错误,您仍然需要过滤器等以某种方式工作。或者仅设置该记录器以使用该附加程序...
  • 请检查这个答案以及 - stackoverflow.com/questions/3685965/…
  • 你不知道为什么我的过滤器不起作用.. :)?

标签: c# logging log4net


【解决方案1】:

来自the documentation

过滤器形成一个事件必须通过的链。一路上的任何过滤器都可以接受事件并停止处理,拒绝事件并停止处理,或允许事件进入下一个过滤器。 如果事件在没有被拒绝的情况下到达过滤器链的末尾,它将被隐式接受并被记录。

(强调我的)

由于您没有适当的过滤器来拒绝任何不是ErrorLogFileAppender 的内容,所有内容都将被记录下来。您可以通过添加 DenyAllFilter 来解决此问题:

<filter type="log4net.Filter.LoggerMatchFilter">
  <!-- allows this sub-namespace to be logged... -->
  <loggerToMatch value="ErrorLogFileAppender" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />

或者,您可以配置 log4net,以便 logger 使用该 appender,例如:

<logger name="ErrorLogFileAppender">
    <appender-ref ref="ErrorLogFileAppender" />
</logger>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-28
    • 2010-11-17
    • 2013-10-16
    • 2014-08-24
    • 2018-01-04
    • 2020-12-23
    • 2016-10-08
    相关资源
    最近更新 更多