В Log4j2, возможно ли отфильтровать определенные пары значений ключа из регистратора на основе ключа?

Может ли Log4j2 быть сконфигурирован таким образом, чтобы фильтры или некоторые другие компоненты могли отфильтровывать определенные значения при печати в журнале? (но должно позволять проходить другим полям в той же строке)

Скажите, что следующие строки появляются в журнале

 [operation=DONE, userName=junitUser, tenant=Tenant [tenantID=default], needDetails=1, message=BaseMsg [version=1.0, sdk=AppSDK [version=1.3, protocols=[4aac81ca, 393ae7a0]], device=Device [id=12345, type=Pompom, info=Dot's Device]]], channel=null
 [operation=DONE, userName=junitUser224, tenant=Tenant [tenantID=default], needDetails=1, message=BaseMsg [version=1.0, sdk=AppSDK [version=1.3, protocols=[4aac81ca,393ae7a0]], device=Device [id=123456, type=Mamamia, info=tom's Device]]], channel=null

Теперь я могу отфильтровать поле "userName" таким образом, чтобы строки журнала не содержали его, как показано ниже?

 [operation=DONE, tenant=Tenant [tenantID=default], needDetails=1, message=BaseMsg [version=1.0, sdk=AppSDK [version=1.3, protocols=[4aac81ca, 393ae7a0]], device=Device [id=12345, type=Pompom, info=Dot's Device]]], channel=null
 [operation=DONE, tenant=Tenant [tenantID=default], needDetails=1, message=BaseMsg [version=1.0, sdk=AppSDK [version=1.3, protocols=[4aac81ca,393ae7a0]], device=Device [id=123456, type=Mamamia, info=tom's Device]]], channel=null

Вот мой log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
  <Appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>
    <RollingFile name="RollingFile" fileName="/Users/dunston/logs/app.log"
                 filePattern="logs/app-%d{MM-dd-yyyy}.log.gz">
        <RegexFilter regex=".* zinger_log .*" onMatch="ACCEPT" onMismatch="DENY"/>

      <PatternLayout>
        <pattern>%d %p %c{1.} [%t] %m%n</pattern>
      </PatternLayout>
      <TimeBasedTriggeringPolicy />
    </RollingFile>
  </Appenders>
    <Loggers>
    <Root level="debug">
      <AppenderRef ref="Console"/>
      <AppenderRef ref="RollingFile"/>         
    </Root>
  </Loggers>
</Configuration>

1 ответ

Решение

Это может быть достигнуто с помощью RewriteAppender.

Вам может потребоваться написать пользовательский RewritePolicy, который проверяет Сообщение LogEvent и заменяет Сообщение другим экземпляром, если отформатированное сообщение содержит регулярное выражение, которое вы хотите отфильтровать.

Ваш пользовательский RewitePolicy может быть настроен в конфигурации, как и любой другой стандартный плагин Log4j2.

Другие вопросы по тегам