Свойства 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"