Свойства Log4j в пользовательском месте

Я использую Apache Commons Logging и SLF4J с log4j, но я также хочу использовать log4j.properties в настраиваемом месте, например conf/log4.properties. Вот проблема:

Если я использую

  PropertyConfigurator.configure("conf/log4j.properties");

тогда мое приложение привязано к log4j и побеждает цель иметь ACL и SLF4J.

Каков наилучший способ настройки без приложения, когда-либо зная, что такое реализация журнала?

Ответы

Ответ 1

Я думаю, что проще всего указать местоположение файла, используя свойство system log4j.configuration. Принятие примера в руководстве Log4J:

java -Dlog4j.configuration=conf/log4j.properties -classpath ...

Я считаю, что Log4J найдет файл с именем "log4j.properties" в любом месте пути класса, но может галлюцинировать. Однако стоит попробовать.

Ответ 2

Как вы заявляете, вызывая PropertiesConfigurator, вы связываете свое приложение с log4j. Однако протяженность этого галстука весьма ограничена. Вы можете легко удалить строку, вызывающую PropertiesConfigurator, и перекомпилировать свой код. После этого, предполагая, что вы используете API SLF4J для ведения журнала, вы можете повторно отправить log4j с другой структурой ведения журнала, скажем, logback-classic или j.u.l. просто заменив файлы jar. Таким образом, SLF4J по-прежнему служит своей цели в значительной степени. Я бы не бросил ребенка с водой для ванны.

Ответ 3

Вы можете указать расположение файла конфигурации с аргументом VM

-Dlog4j.configuration="file:/C:/workspace3/local/log4j.properties"