Java 将log4j.properties移出jar会导致log4j警告(不会生成日志)

Java 将log4j.properties移出jar会导致log4j警告(不会生成日志),java,shell,log4j,classloader,Java,Shell,Log4j,Classloader,我有一个shell脚本test.sh,包含以下内容: echo " Running test.sh ..." | log test_cp=./test/jar/*:./test/lib/* test_main=com.test.TestApp java -cp $test_cp $test_main | log 据我所知,上述文件中使用的相对路径是正确的。在这种情况下,log4jjar位于/test/lib/,包含TestApp(test app.jar)的jar位于/test/jar/

我有一个shell脚本test.sh,包含以下内容:

echo " Running test.sh ..." | log

test_cp=./test/jar/*:./test/lib/*
test_main=com.test.TestApp

java -cp $test_cp $test_main | log
据我所知,上述文件中使用的相对路径是正确的。在这种情况下,log4jjar位于/test/lib/,包含TestApp(test app.jar)的jar位于/test/jar/

现在,当前的场景是log4j.properties打包在test app.jar中,所有Java类都使用log4j记录器创建日志。log4j.properties的内容如下:

log4j.rootLogger=ALL, CONSOLE, FILE


log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d %-5p [%t] %c %M - %n%m%n


log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=test-app.log
log4j.appender.FILE.Append=false
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%d %-5p [%t] %c %M - %n%m%n
echo " Running test.sh ..." | log

test_cp=./test/properties/*:./test/jar/*:./test/lib/*
test_main=com.test.TestApp

java -cp $test_cp $test_main | log
我们希望将log4j.properties外部化,并将其移出test-app.jar。为此,我将log4j.properties放在了./test/properties/,并相应地修改了shell脚本,如下所示:

log4j.rootLogger=ALL, CONSOLE, FILE


log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d %-5p [%t] %c %M - %n%m%n


log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=test-app.log
log4j.appender.FILE.Append=false
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%d %-5p [%t] %c %M - %n%m%n
echo " Running test.sh ..." | log

test_cp=./test/properties/*:./test/jar/*:./test/lib/*
test_main=com.test.TestApp

java -cp $test_cp $test_main | log
但我得到了以下错误,并且没有生成日志文件,也没有任何日志在控制台上出现

log4j:WARN No appenders could be found for logger (com.noknok.util.PropertiesLoader).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
我还在互联网上的某个地方读到,这可能是Java类加载器的问题,因此我尝试更改类路径中不同位置的顺序,将log4j.properties放置在类路径中已经包含的目录中,等等

但我还是犯了同样的错误


非常感谢你的帮助!如果您需要任何其他信息,请返回。

确保log4j使用
-Dlog4.debug

您可以通过
-Dlog4j.configuration=/path/to/file