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

时间:2014-01-07 07:05:53

标签: 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

据我所知,上述文件中使用的相对路径是正确的。在这种情况下, log4j jar 位于 ./ 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

我们想要将log4j.properties外部化并将其移到test-app.jar之外。为此,我将log4j.properties放在./test/properties/并相应地修改了shell脚本,如下所示:

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放在已包含在类路径中的目录中,等等。 / p>

但我仍然遇到同样的错误。

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

1 个答案:

答案 0 :(得分:1)

确保log4j使用-Dlog4.debug

选择正确的log4j.properties文件

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

指定配置文件