3 Star 6 Fork 2

Jyokiyi / log4j2

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
log4j2-filter.md 11.92 KB
一键复制 编辑 原始数据 按行查看 历史
Jyokiyi 提交于 2017-06-19 23:26 . Signed-off-by:filter追加

Log4j2 -- Filters

过滤器允许评估日志事件,以确定是否发布或如何发布。过滤器将在其一个过滤器方法上调用,并返回一个结果,它是一个具有3个值之一的枚举:ACCEPT, DENY 和 NEUTRAL。

过滤器可以在四个地方使用:

  • 上下文范围的过滤器在配置中直接配置。被这些过滤器拒绝的事件不会传递给记录器进行进一步处理。一旦一个事件被上下文范围的过滤器所接受,它就不会被任何其他上下文范围的过滤器评估,也不会使用记录器的级别过滤事件。事件将由Logger和Appender Filters进行评估。
  • 在指定的记录器上配置记录器过滤器。这些在上下文范围过滤器和记录器的日志级别之后进行评估。被这些过滤器拒绝的事件将被丢弃,并且事件将不会传递到父记录器,而不考虑添加性设置。
  • Appender Filters用于确定指定的Appender是否应处理事件的格式和发布。
  • Appender Reference Filters用于确定Logger是否应将事件路由到appender。

BurstFilter

BurstFilter提供了一种机制,通过在达到最大限制后静默地丢弃事件来控制LogEvents的处理速率。

Burst Filter Parameters:

Parameter Name Type Description
level String 要过滤的消息级别。如果超出了maxBurst,则该级别以下的任何内容将被过滤掉。默认值为WARN,不管突发的大小如何,都会记录高于警告的任何消息。
rate float 每秒允许的平均事件数。
maxBurst integer 在事件之前可能发生的事件的最大数量被过滤以超过平均速率。默认值为10倍。
onMatch String 过滤器匹配时采取的行动。可以是ACCEPT, DENY 或 NEUTRAL。默认值为NEUTRAL。
onMismatch String 当过滤器不匹配时采取的行动。可以是ACCEPT, DENY 或 NEUTRAL。默认值为DENY。

示例如下:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
  <Appenders>
    <RollingFile name="RollingFile" fileName="logs/app.log"
                 filePattern="logs/app-%d{MM-dd-yyyy}.log.gz">
      <BurstFilter level="INFO" rate="16" maxBurst="100"/>
      <PatternLayout>
        <pattern>%d %p %c{1.} [%t] %m%n</pattern>
      </PatternLayout>
      <TimeBasedTriggeringPolicy />
    </RollingFile>
  </Appenders>
  <Loggers>
    <Root level="error">
      <AppenderRef ref="RollingFile"/>
    </Root>
  </Loggers>
</Configuration>

CompositeFilter

CompositeFilter提供了一种指定多个过滤器的方法。它作为过滤器元素添加到配置中,并包含使用其他过滤器。过滤器元素不接受任何参数。示例如下:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
  <Filters>
    <MarkerFilter marker="EVENT" onMatch="ACCEPT" onMismatch="NEUTRAL"/>
    <DynamicThresholdFilter key="loginId" defaultThreshold="ERROR"
                            onMatch="ACCEPT" onMismatch="NEUTRAL">
      <KeyValuePair key="User1" value="DEBUG"/>
    </DynamicThresholdFilter>
  </Filters>
  <Appenders>
    <File name="Audit" fileName="logs/audit.log">
      <PatternLayout>
        <pattern>%d %p %c{1.} [%t] %m%n</pattern>
      </PatternLayout>
    </File>
    <RollingFile name="RollingFile" fileName="logs/app.log"
                 filePattern="logs/app-%d{MM-dd-yyyy}.log.gz">
      <BurstFilter level="INFO" rate="16" maxBurst="100"/>
      <PatternLayout>
        <pattern>%d %p %c{1.} [%t] %m%n</pattern>
      </PatternLayout>
      <TimeBasedTriggeringPolicy />
    </RollingFile>
  </Appenders>
  <Loggers>
    <Logger name="EventLogger" level="info">
      <AppenderRef ref="Audit"/>
    </Logger>
    <Root level="error">
      <AppenderRef ref="RollingFile"/>
    </Root>
  </Loggers>
</Configuration>

DynamicThresholdFilter

DynamicThresholdFilter允许根据特定属性按日志级别进行过滤。例如,如果用户的loginId正在ThreadContext Map中捕获,那么可以为该用户启用调试日志记录。

Dynamic Threshold Filter Parameters:

Parameter Name Type Description
defaultThreshold String 要过滤的消息级别。如果键/值对中没有匹配键,则该级别将与事件的级别进行比较。
keyValuePair KeyValuePair[] 一个或多个KeyValuePair元素,用于定义键的匹配值,以及用于评估键匹配时的Level。
onMatch String 过滤器匹配时采取的行动。可以是ACCEPT, DENY 或 NEUTRAL。默认值为NEUTRAL。
onMismatch String 当过滤器不匹配时采取的行动。可以是ACCEPT, DENY 或 NEUTRAL。默认值为DENY。

示例如下:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
  <DynamicThresholdFilter key="loginId" defaultThreshold="ERROR"
                          onMatch="ACCEPT" onMismatch="NEUTRAL">
    <KeyValuePair key="User1" value="DEBUG"/>
  </DynamicThresholdFilter>
  <Appenders>
    <RollingFile name="RollingFile" fileName="logs/app.log"
                 filePattern="logs/app-%d{MM-dd-yyyy}.log.gz">
      <BurstFilter level="INFO" rate="16" maxBurst="100"/>
      <PatternLayout>
        <pattern>%d %p %c{1.} [%t] %m%n</pattern>
      </PatternLayout>
      <TimeBasedTriggeringPolicy />
    </RollingFile>
  </Appenders>
  <Loggers>
    <Root level="error">
      <AppenderRef ref="RollingFile"/>
    </Root>
  </Loggers>
</Configuration>

MapFilter

MapFilter允许对MapMessage中的数据元素进行过滤。

Map Filter Parameters:

Parameter Name Type Description
operator String 如果操作符是"or",则任何一个键/值对被匹配将被认为是匹配,否则所有键/值对必须匹配。
keyValuePair KeyValuePair[] 一个或多个KeyValuePair元素,用于定义键的匹配值,以及用于评估键匹配时的Level。
onMatch String 过滤器匹配时采取的行动。可以是ACCEPT, DENY 或 NEUTRAL。默认值为NEUTRAL。
onMismatch String 当过滤器不匹配时采取的行动。可以是ACCEPT, DENY 或 NEUTRAL。默认值为DENY。

示例如下:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
  <MapFilter onMatch="ACCEPT" onMismatch="NEUTRAL" operator="or">
    <KeyValuePair key="eventId" value="Login"/>
    <KeyValuePair key="eventId" value="Logout"/>
  </MapFilter>
  <Appenders>
    <RollingFile name="RollingFile" fileName="logs/app.log"
                 filePattern="logs/app-%d{MM-dd-yyyy}.log.gz">
      <BurstFilter level="INFO" rate="16" maxBurst="100"/>
      <PatternLayout>
        <pattern>%d %p %c{1.} [%t] %m%n</pattern>
      </PatternLayout>
      <TimeBasedTriggeringPolicy />
    </RollingFile>
  </Appenders>
  <Loggers>
    <Root level="error">
      <AppenderRef ref="RollingFile"/>
    </Root>
  </Loggers>
</Configuration>

此示例配置将显示与上述示例相同的行为,因为配置的唯一记录器是根。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
  <Appenders>
    <RollingFile name="RollingFile" fileName="logs/app.log"
                 filePattern="logs/app-%d{MM-dd-yyyy}.log.gz">
      <BurstFilter level="INFO" rate="16" maxBurst="100"/>
      <PatternLayout>
        <pattern>%d %p %c{1.} [%t] %m%n</pattern>
      </PatternLayout>
      <TimeBasedTriggeringPolicy />
    </RollingFile>
  </Appenders>
  <Loggers>
    <Root level="error">
      <MapFilter onMatch="ACCEPT" onMismatch="NEUTRAL" operator="or">
        <KeyValuePair key="eventId" value="Login"/>
        <KeyValuePair key="eventId" value="Logout"/>
      </MapFilter>
      <AppenderRef ref="RollingFile">
      </AppenderRef>
    </Root>
  </Loggers>
</Configuration>

第三个示例配置将显示与上述示例相同的行为,因为配置的唯一记录器是根,并且根仅配置有单个appender引用。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
  <Appenders>
    <RollingFile name="RollingFile" fileName="logs/app.log"
                 filePattern="logs/app-%d{MM-dd-yyyy}.log.gz">
      <BurstFilter level="INFO" rate="16" maxBurst="100"/>
      <PatternLayout>
        <pattern>%d %p %c{1.} [%t] %m%n</pattern>
      </PatternLayout>
      <TimeBasedTriggeringPolicy />
    </RollingFile>
  </Appenders>
  <Loggers>
    <Root level="error">
      <AppenderRef ref="RollingFile">
        <MapFilter onMatch="ACCEPT" onMismatch="NEUTRAL" operator="or">
          <KeyValuePair key="eventId" value="Login"/>
          <KeyValuePair key="eventId" value="Logout"/>
        </MapFilter>
      </AppenderRef>
    </Root>
  </Loggers>
</Configuration>

MarkerFilter

MarkerFilter将配置的标记值与LogEvent中包含的标记进行比较。当标记名称与日志事件的标记或其父母之一匹配时,发生匹配。

Marker Filter Parameters:

Parameter Name Type Description
marker String 要比较的标记的名称。
keyValuePair KeyValuePair[] 一个或多个KeyValuePair元素,用于定义键的匹配值,以及用于评估键匹配时的Level。
onMatch String 过滤器匹配时采取的行动。可以是ACCEPT, DENY 或 NEUTRAL。默认值为NEUTRAL。
onMismatch String 当过滤器不匹配时采取的行动。可以是ACCEPT, DENY 或 NEUTRAL。默认值为DENY。

示例如下:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
  <Appenders>
    <RollingFile name="RollingFile" fileName="logs/app.log"
                 filePattern="logs/app-%d{MM-dd-yyyy}.log.gz">
      <MarkerFilter marker="FLOW" onMatch="ACCEPT" onMismatch="DENY"/>
      <PatternLayout>
        <pattern>%d %p %c{1.} [%t] %m%n</pattern>
      </PatternLayout>
      <TimeBasedTriggeringPolicy />
    </RollingFile>
  </Appenders>
  <Loggers>
    <Root level="error">
      <AppenderRef ref="RollingFile"/>
    </Root>
  </Loggers>
</Configuration>

RegexFilter

RegexFilter允许将格式化或未格式化的消息与正则表达式进行比较。

Regex Filter Parameters:

Parameter Name Type Description
regex String 正则表达式。
useRawMsg boolean 如果为true,则将使用未格式化的消息,否则将使用格式化的消息。默认值为false。
onMatch String 过滤器匹配时采取的行动。可以是ACCEPT, DENY 或 NEUTRAL。默认值为NEUTRAL。
onMismatch String 当过滤器不匹配时采取的行动。可以是ACCEPT, DENY 或 NEUTRAL。默认值为DENY。

示例如下:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
  <Appenders>
    <RollingFile name="RollingFile" fileName="logs/app.log"
                 filePattern="logs/app-%d{MM-dd-yyyy}.log.gz">
      <RegexFilter regex=".* test .*" onMatch="ACCEPT" onMismatch="DENY"/>
      <PatternLayout>
        <pattern>%d %p %c{1.} [%t] %m%n</pattern>
      </PatternLayout>
      <TimeBasedTriggeringPolicy />
    </RollingFile>
  </Appenders>
  <Loggers>
    <Root level="error">
      <AppenderRef ref="RollingFile"/>
    </Root>
  </Loggers>
</Configuration>
Java
1
https://gitee.com/Jyokiyi/log4j2.git
git@gitee.com:Jyokiyi/log4j2.git
Jyokiyi
log4j2
log4j2
master

搜索帮助