Свойства Log4j от каждого модуля - PullRequest
5 голосов
/ 01 октября 2010

Я пишу приложение, которое состоит из нескольких модулей maven. Все они должны записывать материал в свои собственные файлы журнала. Я создал файл log4j.properties в папке main / resources каждого модуля. Теперь, когда я запускаю приложение из одного из модулей, оно записывает все в файл журнала этого модуля. Я задавался вопросом, было ли это просто потому, что он мог взять root-каталог из этого стартового модуля и использовать его для сохранения файлов журнала, но когда я создал appender для этого стартового модуля (используя категорию в свойствах log4j) без rootLogger он выдает ошибку о классах в других модулях, которые не могут найти свои приложения, что указывает на то, что файлы log4j.properties в каждом из этих модулей не найдены или не прочитаны. Кто-нибудь есть идеи, как решить эту проблему и заставить эти модули использовать эти файлы свойств, или мне нужно поместить все приложения в один большой файл log4j.properties, чтобы все журналы появлялись в корневой папке этого стартового модуля вместо корневые папки этих других модулей?

Я надеюсь, что вопрос достаточно ясен, чтобы понять, в противном случае не стесняйтесь спрашивать подробности.

Ответы [ 2 ]

0 голосов
/ 02 октября 2010

Если вы включите отдельные log4j.properties в src / main / resources каждого отдельного модуля и загрузите сгенерированные файлы jar в один загрузчик классов, будет загружен только один ресурс, так как log4j загружает файлы свойств из загрузчика классов (вашресурсы пересекаются в имени файла).

Я бы не включил файлы log4j.configuration в любые моих файлов jar.По двум причинам:

  • Не будет работать в вашем случае.

  • Чтобы настроить log4j (редактирование многословия регистраторов), я хотел бынеобходимо открыть файл jar и отредактировать файл свойств.

Другое решение может заключаться в создании другого модуля, создающего затененный (http://maven.apache.org/plugins/maven-shade-plugin/) файл jar из остальных модулей, включаяодин log4j.properties в src / main / resources. Затем, если у вас есть другой модуль, использующий ваши предыдущие проекты в качестве зависимостей, вы можете включить в качестве зависимости только затененный.

Однако это решение, которое я бы не хотелне использовать.

Надеюсь, что поможет.

0 голосов
/ 01 октября 2010

Насколько я знаю, только log4j.properties вызванного модуля считываются и инициализируются по умолчанию.

Если вы хотите вызывать отдельные модули из одного стартового модуля, вам нужно добавить все свои приложения в один файл log4j.properties, расположенный в каталоге start-module / src / main / resources. Если и когда вы захотите, это, вероятно, вопрос архитектуры.

Просто предложение: переключитесь на ведение журналов на основе XML сейчас, если вам нужны более продвинутые средства ведения журналов сейчас или в будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...