Загрузите log4j.properties с помощью JAR

У меня есть файл jar со следующим манифестом

Manifest-Version: 1.0  
Created-By: 1.7.0_07 (Oracle Corporation)  
Main-Class: test.Main  
Class-Path: ./log4j.properties lib/log4j-1.2.17.jar 

Я запускаю класс следующим образом

java -jar test.jar

И это моя папка

lib
log4j.properties
test.jar

Почему я не вижу файл свойств log4j? Это то, что я вижу

log4j:WARN No appenders could be found for logger (test.Main).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

Спасибо

РЕШЕНИЕ: изменил мою classhpath в MANIFEST на этот

Class-Path: . lib/log4j-1.2.17.jar 

Ответ 1

Вы также можете запустить JVM с аргументом:

-Dlog4j.configuration=file:"./your/properties/path/log4j.properties"

чтобы указать произвольное местоположение ваших внешних свойств журнала. Я использовал это в одном конкретном проекте.

Ответ 2

Файл свойств doesn 'go in classpath, вы должны предоставить его и вызвать его из кода, как показано здесь.

EDIT: С вашей структурой каталогов вы вызываете это следующим образом:

PropertyConfigurator.configure("log4j.properties");

EDIT2:

Кроме того, вы должны предоставить для этого приложение:

log4j.rootLogger=DEBUG, Appender1
log4j.logger.[logger-name]=level, Appender1
log4j.appender.Appender1=org.apache.log4j.ConsoleAppender
log4j.appender.Appender1.layout=org.apache.log4j.PatternLayout
log4j.appender.Appender1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

Если вам нужен более тонкий контроль за протоколированием, удалите первую строку (root looger) и поместите вторую, где вместо [logger-name] вы поместите самый верхний пакет, чтобы все классы внутри этого пакета могли использовать протоколирование.

Вы можете определить несколько добавлений и назначить их различным классам таким образом.

Ответ 3

PropertyConfigurator.configure(ABC.class.getResourceAsStream("log4j.properties")) работал правильно, но в основном вам нужно поместить файл свойств Log4j в папку исходного кода (рядом с классом Java).

ИЛИ вы можете попробовать поставить снаружи и указать правильный путь в методе getResourceAsStream("resources/log4j.properties")