Свойства Log4j в пользовательском месте - PullRequest
14 голосов
/ 18 мая 2009

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

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

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

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

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

Ответы [ 3 ]

26 голосов
/ 18 мая 2009

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

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

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

3 голосов
/ 29 мая 2009

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

1 голос
/ 05 марта 2010

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

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

...