Log4j2 отключить appender на основе свойства - PullRequest
0 голосов
/ 15 января 2020

У меня есть два приложения: консоль и приложение Kibana. При работе в среде разработки я хочу иметь возможность отключить приложение Kibana.

Я пробовал несколько способов добиться этого, но ничего не работает:

  1. Как программно удалить appender из logger в log4j2? - даже если я удаляю appender, он все равно отправляет журналы

  2. Как условно добавить app4 log4j2 в зависимости от java системное свойство? <AppenderRef ref="elasticsearchAsyncBatch" level="${sys:logLevel:-all}"/> - appender игнорирует переменные, передаваемые из командной строки через: export LOG_LEVEL = off, и всегда использует значение по умолчанию, все в этом примере У сценариев решения та же проблема

  3. <ThresholdFilter level="${sys:logLevel}" onMatch="ACCEPT" onMismatch="DENY"/> - атрибут уровня не принимает значения Dynami c и выдает ошибку, что он не может привести «$ {sys: logLevel}» к уровню enum

Log4j ver 2.11.2

1 Ответ

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

Проблема с вариантом 1 неясна из предоставленной вами информации. Как вы удалили аппендер? Вы не можете просто удалить его из конфигурации, так как все настроенные регистраторы все равно будут указывать на него. Вам нужно будет изменить все настроенные ссылки на приложение-регистратор, чтобы сначала указывать на другое приложение.

Для решения 2 вы указали ${sys:loglevel:-all}, но затем попытались установить его значение с помощью переменной среды. Вам нужно запустить ваше приложение с -Dloglevel = DEBUG, чтобы это работало. В качестве альтернативы вы можете указать $ {env: LOG_LEVEL: -all} и использовать заданную вами переменную среды.

Я ожидаю, что решение 3 - это та же проблема, что и решение 2. Поскольку вы не указали значение по умолчанию, когда он не находит системное свойство loglevel, он просто возвращает себя в виде строки, которая, очевидно, является недопустимым значением.

...