Изменение уровня журнала для ключевого слова в log4j2 - PullRequest
0 голосов
/ 09 января 2020

Я пытаюсь программно изменить уровни журнала для данного ключевого слова. Например, если для уровня журнала установлено значение OFF, но я хочу видеть журналы, содержащие ключевое слово «database», как я могу это сделать? Есть ли способ сделать это через java?

Ответы [ 2 ]

2 голосов
/ 10 января 2020

@ fatCop ответ в основном правильный. Вы можете начать с log4j2. xml, настроенным как

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

Поскольку это использует глобальный фильтр, он ничего не будет регистрировать. Когда вы будете готовы включить ведение журнала, выполните

final LoggerContext loggerContext = LoggerContext.getContext(false);
final Configuration config = loggerContext.getConfiguration();
Filter filter = RegexFilter.createFilter("database", null, false, Result.ACCEPT, RESULT.DENY);
config.setFilter(filter);

. Если вы хотите, чтобы он был отключен, замените фильтр на новый, для которого в матче снова установлено значение DENY.

Обратите внимание, что уровень ведения журнала в регистраторе root не имеет значения, поскольку фильтр принимает или отклоняет только события.

1 голос
/ 09 января 2020

Согласно Руководству по фильтру Log4j , вы можете использовать RegexFilter. Фрагмент со ссылкой на руководство пользователя, конфигурация для вас может быть такой:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="AppName" packages="">
  <Appenders>
    <RollingFile name="RollingFile" fileName="logs/app.log"
                 filePattern="logs/app-%d{MM-dd-yyyy}.log.gz">
      <RegexFilter regex="*database*" 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>
...