如何将AND log4net过滤器放在一起

Ale*_*lex 8 logging log4net log4net-configuration log4net-filter

我想创建一个仅针对特定级别记录的appender,仅针对特定记录器.从我所看到的,基于本教程,过滤器是ORed在一起.我如何和log4net一起过滤?这是我正在做的一个例子:

<appender name="MyAppender">
      <!--log only INFO level-->
      <filter type="log4net.Filter.LevelMatchFilter">
          <levelToMatch value="INFO" />
      </filter>

      <!--log only UserController logger-->
      <filter type="log4net.Filter.LoggerMatchFilter">
        <loggerToMatch value="MyLogger" />
      </filter>

      <!-- do not log anything else -->
      <filter type="log4net.Filter.DenyAllFilter" />
</appender>
Run Code Online (Sandbox Code Playgroud)

Nar*_*ade 9

你可以写一个自定义的AndFilter,这很容易.您可以使用此处发布的代码 - /sf/answers/620132621/

用法如下:

<filter type="Namespace.AndFilter, Assembly">
      <!--log only INFO level-->
      <filter type="log4net.Filter.LevelMatchFilter">
          <levelToMatch value="INFO" />
      </filter>

      <!--log only UserController logger-->
      <filter type="log4net.Filter.LoggerMatchFilter">
        <loggerToMatch value="MyLogger" />
      </filter>
      <acceptOnMatch value="true"/>
</filter>
<!-- do not log anything else -->
<filter type="log4net.Filter.DenyAllFilter" />
Run Code Online (Sandbox Code Playgroud)

  • 听起来不是太糟糕,但我很惊讶这种功能并没有内置到log4net中 (2认同)

Ras*_*ack 7

您可以使用ForwardingAppender(请参阅Config示例)并将一个过滤器放在那里,另一个放在目标appender中(或者随意链接它们).

<appender name="FilterOnlyInfo" type="log4net.Appender.ForwardingAppender">
  <!--log only INFO level-->
  <filter type="log4net.Filter.LevelMatchFilter">
      <levelToMatch value="INFO" />
  </filter>
  <appender-ref ref="FinalAppender" />
</appender>
<appender name="FinalAppender">
  <!--log only UserController logger-->
  <filter type="log4net.Filter.LoggerMatchFilter">
    <loggerToMatch value="MyLogger" />
  </filter>
</appender>
Run Code Online (Sandbox Code Playgroud)

我相信这个appender可能在问题发生时可能不是log4net的一部分.