Как использовать поиск по карте с помощью Log4j2?

Я просматривал эти три сайта о том, как создать поиск по карте (или любой другой поиск в этом отношении) с помощью log4j2:

Я понимаю общую идею того, что я читаю, мне просто трудно собрать воедино все кусочки.

Цель

Чтобы иметь возможность поместить какую-либо переменную в файл log4j2.xml, который во время настройки или во время выполнения заменяет эту переменную значениями в пакете ресурсов. Это то, что у меня есть до сих пор:

Файл конфигурации

введите здесь описание изображения

Класс поиска

введите здесь описание изображения

Метод getValue(key) ищет в пакете ресурсов значения электронной почты, связанные с этим ключом. Имя @Plugin — это «карта», которая, если я правильно прочитал, связана с префиксами в файле .xml, которые также являются «картой». ". Итак, не будет ли «error.notification.emails» передаваться в метод поиска (строковый ключ) в классе MapPropertiesLookup? Что мне нужно сделать, чтобы заставить это работать?


person j will    schedule 09.10.2013    source источник


Ответы (2)


Да, карта — это имя создаваемого вами поиска. Поскольку в Log4j уже есть именованная карта поиска, создание другой вызовет проблемы.

Да, сообщения error.notification.emails должны передаваться в качестве значения ключа для поиска. Предполагая, что getValue(key) работает, ваш поиск, вероятно, будет работать, если он будет назван как-то иначе.

Тем не менее, для вас может иметь смысл подать Jira и запросить ResourceBundleLookup, где синтаксис может быть примерно таким: ${bundle:bundleName:key}. Конечно, «bundleName:key» будет передан в поиск как ключ, и он разделит ключ на составные части.

Если у вас есть дополнительные проблемы, вы можете задать их в списке рассылки разработчиков Log4j.

person rgoers    schedule 09.10.2013
comment
я сделал то, что вы предложили, создав другое имя плагина для моего класса поиска, но мой класс поиска, похоже, не достигает точек останова. Я по-прежнему получаю сообщение об исключении: «Локальный адрес содержит недопустимый символ в строке «${bundlemap:error.notification.emails}». В приложении SMTP ключу to назначается ${bundlemap:error.notification.emails}, а имя плагина такое же. - person j will; 09.10.2013
comment
Я пытался отправить электронное письмо в список рассылки log4j dev, но я продолжаю получать сообщения об ошибках в ответ. - person j will; 09.10.2013

Я добавил новый поиск для следующего выпуска (будь то бета-версия или релиз-кандидат):

Выполнена ревизия 1531064.

Вы можете использовать его сейчас, если соберете Log4J из исходного кода. Формат задокументирован, если вы строите сайт, он используется следующим образом:

${bundle:BundleName:BundleKey}

Например:

${bundle:com.domain.Messages:MyKey}

Класс java.util.ResourceBundle будет искать com/domain/Messages.properties в пути к классам.

Наша проблема JIRA: https://issues.apache.org/jira/browse/LOG4J2-420

person Gary Gregory    schedule 10.10.2013
comment
Как собрать Log4J из исходников? Я не видел, где я мог бы сделать это на веб-сайте. - person j will; 11.10.2013