DynamicThresholdFilter не применяется к конкретному пакету в Log4j2JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 DynamicThresholdFilter не применяется к конкретному пакету в Log4j2

Сообщение Anonymous »

Я пытаюсь применить DynamicThresholdFilter в Log4j2 для фильтрации журналов для определенного пакета (

Код: Выделить всё

com.example.orange). Моя цель — динамически включить журналы DEBUG/TRACE только для этого пакета на основе специального ключа MDC
(requestLogLevel).
Вот конфигурация, которую я использую для конкретного пакета. регистратор:

Код: Выделить всё

# Appenders
appender.console.type=Console
appender.console.name=Console
appender.console.target=SYSTEM_OUT
appender.console.follow=true
appender.console.layout.type=PatternLayout
appender.console.layout.pattern=${LOG_PATTERN}

logger.app.name=com.example.orange
logger.app.level=warn
logger.app.additivity=false
logger.app.appenderRef.console.ref=Console

# Dynamic threshold filter: supposed to apply DEBUG for only the com.example.orange package
logger.app.filter.type=DynamicThresholdFilter
logger.app.filter.key=requestLogLevel
logger.app.filter.defaultThreshold=WARN
logger.app.filter.onMatch=ACCEPT
logger.app.filter.onMismatch=NEUTRAL
logger.app.filter.keyValuePair.type=KeyValuePair
logger.app.filter.keyValuePair.key=TRACE
logger.app.filter.keyValuePair.value=TRACE
logger.app.filter.keyValuePair[1].type=KeyValuePair
logger.app.filter.keyValuePair[1].key=DEBUG
logger.app.filter.keyValuePair[1].value=DEBUG
Однако эта конфигурация не включает журналы DEBUG для com.example.orange, когда я устанавливаю для requestLogLevel значение DEBUG или TRACE в MDC. Журналы по-прежнему соответствуют пороговому значению по умолчанию WARN.
Если я перенесу DynamicThresholdFilter в глобальный фильтр, например:

Код: Выделить всё

# Appenders
appender.console.type=Console
appender.console.name=Console
appender.console.target=SYSTEM_OUT
appender.console.follow=true
appender.console.layout.type=PatternLayout
appender.console.layout.pattern=${LOG_PATTERN}

filter.console.type=DynamicThresholdFilter
filter.console.key=requestLogLevel
filter.console.defaultThreshold=WARN
filter.console.onMatch=ACCEPT
filter.console.onMismatch=NEUTRAL
filter.console.keyValuePair.type=KeyValuePair
filter.console.keyValuePair.key=TRACE
filter.console.keyValuePair.value=TRACE
filter.console.keyValuePair[1].type=KeyValuePair
filter.console.keyValuePair[1].key=DEBUG
filter.console.keyValuePair[1].value=DEBUG
Он работает, но применяет фильтр глобально ко всем пакетам, включая журналы DEBUG/TRACE для всех пакетов (пример Spring, классы микрометра, используемые в потоке кода) в потоке моего приложения, что это не предполагаемое поведение.
Устранение неполадок, которые я пробовал:
  • Проверил, что requestLogLevel MDC ключ установлен правильно.
  • Убедился, что для logger.app.additivity установлено значение false, чтобы избежать наследования конфигураций от корневого средства ведения журнала.
  • Подтверждено, что глобальный DynamicThresholdFilter работает должным образом, но применяется глобально ко всем пакетам.
Как настроить DynamicThresholdFilter для применения только к конкретный пакет (com.example.orange), не затрагивая другие регистраторы? Есть ли способ ограничить область действия фильтра или переопределить его поведение?

Подробнее здесь: https://stackoverflow.com/questions/792 ... -in-log4j2
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»