Создание банок Uber / Fat с помощью Log4j - PullRequest
1 голос
/ 30 октября 2019

Я создаю Uber JAR, используя плагин сборки Maven. Одной из зависимостей моей программы является приложение, которое может запускаться либо путем запуска внутри моей программы через поток, либо может запускаться независимо, так как это собственный uberjar.

Моя проблема в том, что оба приложения используют log4j2, и оба имеют log4j2.xml в папке ресурсов. Когда maven делает мои приложения Uberjar, он перезаписывает файл конфигурации моих приложений log4j.xml файлом из зависимости. Есть ли способ обойти это, все еще позволяя обоим приложениям иметь файл конфигурации в папке ресурсов?

1 Ответ

1 голос
/ 30 октября 2019

Когда Log4j запускается, он находит конфигурацию со взвешенным порядком от высшего к низшему:

  1. Log4j проверяет системное свойство log4j.configurationFile и, если установлено, пытается загрузитьКонфигурация с использованием ConfigurationFactory, которая соответствует расширению файла.
  2. Если не установлено системное свойство, ConfigurationFactory будет искать log4j2-test.properties в classpath.
  3. Если такого файла не найдено,YAML ConfigurationFactory будет искать log4j2-test.yaml или log4j2-test.yml в пути к классам.
  4. Если такой файл не найден, JSON ConfigurationFactory будет искать log4j2-test.json или log4j2-test.jsn впуть к классу.
  5. Если такой файл не найден, XML ConfigurationFactory будет искать log4j2-test.xml в пути к классам.
  6. Если тестовый файл не может быть найден, свойства ConfigurationFactory будет искать log4j2.properties в classpath.
  7. Если файл свойств не может быть найденYAML ConfigurationFactory будет искать log4j2.yaml или log4j2.yml в пути к классам.
  8. Если не удается найти файл YAML, JSON ConfigurationFactory будет искать log4j2.json или log4j2.jsn в пути к классам.
  9. Если не удается найти файл JSON, XML ConfigurationFactory попытается найти log4j2.xml в пути к классам.
  10. Если файл конфигурации не найден, будет использоваться DefaultConfiguration. Это приведет к тому, что вывод журнала войдет в консоль.

Таким образом, проще всего будет переместить ваш log4j.xml в подпапку в вашей директории ресурсов и определить ее, используя свойство "log4j.configurationFile». В противном случае просто переключитесь на конфигурационный файл базы свойств "log4j2.properties". Может быть, вам поможет конвертер .

Пожалуйста, ознакомьтесь с документацией (вот откуда я взял этот список).

...