2016-04-29 2 views
5

Я использую log4j2 (версия - 2.5), и я пытаюсь написать плагин конвертера сообщений, который замаскирует некоторые из известных шаблонов сообщения журнала.Как скрыть сообщения журнала log4j2

@Plugin(name = "CustomeMasking", 
     category = "Converter") 
@ConverterKeys({"m"}) 
public class MyCustomFilteringLayout extends LogEventPatternConverter { 
} 

Когда я бегу мое веб-приложение, с помощью этого плагина, то я вижу в этом предупредит сообщение

WARN конвертер ключ «м» уже отображен «класса org.apache.logging.log4j.core .pattern.MessagePatternConverter. Извините, Дэйв, я не могу этого сделать! Игнорирование плагина [класс MyCustomFilteringLayout].

После изучения сайта log4j2 я нашел эти ссылки.

Reference

Если несколько конвертеров указать тот же ConverterKeys, то нагрузка порядок выше, определяет, какая из них будут использоваться. Например, до переопределить конвертер даты%, который предоставляется встроенным классом DatePatternConverter, вам необходимо разместить свой плагин в файле JAR в CLASSPATH перед log4j-core.jar. Это не рекомендуется; pattern ConverterKeys вызовет предупреждение об ошибке . Попытайтесь использовать уникальные ConverterKeys для своего настраиваемого шаблона конвертеров .

Мне нужна помощь, чтобы понять, как я могу написать свои пользовательские преобразователи для m/msg. Есть ли лучший способ сделать это?

Дополнительная информация: Я создал затененную банку для MyCustomFilteringLayout. Причина, по которой я делаю это, заключается в том, что я хочу, чтобы логика маскировки была отделена от приложения.


Обновлен

Я создал конвертер для собственного ключа, который выглядит так,

@Plugin(name = "CustomeMasking", 
      category = "Converter") 
    @ConverterKeys({"cm"}) 
    public class MyCustomFilteringLayout extends LogEventPatternConverter { 
    } 

Здесь я не могу написать еще один конвертер для того же ConverterKeys - см? Теперь мой log4j2.xml имеет этот макет шаблона,

<PatternLayout> 
       <Pattern>%d %p %c{1.} [%t] %cm %ex%n</Pattern> 
      </PatternLayout> 
+0

Просто удивляйтесь, можете ли вы просто использовать другой ключ, который не используется существующим конвертером, и соответственно изменить шаблон журнала? –

+0

Если я это сделаю, то я не смогу написать несколько конвертеров для моего ключа, который, я думаю, не решит мой вариант использования. Мой вариант использования: я хочу скрыть определенные шаблоны из сообщений журнала, и я думаю, это создать много конвертеров для разных сценариев. Я делаю это неправильно? Есть ли лучший способ сделать это? – Shishir

+0

Я предполагаю, что вы хотите маскировать данные в журнале событий, а не предотвращать использование определенных ключей конвертера? Почему бы просто не написать собственный конвертер с помощью другого ключа конвертера? Я не совсем понимаю ваше утверждение о том, что вы не сможете писать несколько конвертеров. Возможно, вам нужно объяснить немного лучше, чего вы хотите достичь. – rgoers

ответ

3

Ваше обновление решает проблему и отвечает на вопрос, как заменить встроенный в сообщение конвертер с обычаем один. Ему нужен уникальный ключ.

Похоже, вы хотите параметризовать свой узор. Многие шаблоны принимают параметр options. Вы можете использовать это для управления поведением, поэтому указание% cm {key1} в шаблоне макета даст разные результаты, чем% cm {key2}.

Для примера преобразователя, который принимает параметры, см. Исходный код MdcPatternConverter.

+0

Было ли это полезно ? –

+0

Спасибо за ваш ответ. Это полезно. – Shishir