我有这个scala应用程序非常简单。它所做的只是初始化一个记录器并执行logger.info(“Hello”)。我在类路径中有一个log4j.properties文件,其中包含以下设置
# Root logger option
log4j.rootLogger=INFO, stdout
# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
但是,当我尝试运行该应用程序时。我收到了错误 log4j:WARN找不到logger(app.TestApp $)的appender。 log4j:WARN请正确初始化log4j系统。
我错过了什么?但是,如果我在类路径中有hadoop-core.jar,我会打印出日志(是的,里面还有一个log4j)
答案 0 :(得分:6)
您的log4J配置文件不在类路径中,即使您认为它也是如此。
解决此问题的最简单方法是将-Dlog4j.debug
添加到VM参数,然后Log4J将跟踪它用于查找其配置的算法:
scala -cp {yourclasspath} -Dlog4j.debug {yourscalaentrypoint}
不幸的是,@Jens的答案在您运行Scala程序时无法帮助您,因为Scala不使用标准Java系统属性来存储其类路径。当您需要打印出用于Scala程序的类路径时,您应该使用类似this technique的内容。
答案 1 :(得分:1)
听起来在类路径中找不到您的属性文件。打印出类路径(系统属性java.class.path)以验证发生了什么。