【发布时间】:2014-01-07 07:05:52
【问题描述】:
我有一个带有以下内容的 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.
我还在 Internet 上某处读到这可能是 Java 类加载器问题,因此我尝试更改类路径中不同位置的顺序,将 log4j.properties 放置在类路径中已包含的目录中,等等。
但我仍然遇到同样的错误。
非常感谢您的帮助!如果您需要任何其他信息,请返回。
【问题讨论】:
标签: java shell log4j classloader