执行“sbt run”时,scalalogging不显示INFO消息

时间:2014-02-28 17:20:26

标签: java logging sbt slf4j log4j2

我有一个包含以下log4j.properties文件的SBT项目(在src/main/resources中):

log4j.rootLogger=INFO, 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{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

build.sbt

 "com.typesafe" %% "scalalogging-log4j" % "1.1.0",
 "org.slf4j" % "slf4j-log4j12" % "1.7.5",
 "org.apache.logging.log4j" % "log4j-core" % "2.0-beta4",
 "org.apache.logging.log4j" % "log4j-api" % "2.0-beta4"

执行sbt run时,以下代码段无法向控制台输出任何内容:

 class Retrieval extends Logging {
   def get(userID: Int): Seq[String] = {
     logger.info("test")
   }
 }

更改为logging.error("test")工作正常。知道发生了什么事吗?

1 个答案:

答案 0 :(得分:2)

您正在使用log4j2(我建议升级到更新的log4j-2.0-RC1,顺便说一句),但您的配置适用于旧版log4j-1.2。

Log4j2正在查找log4j2.xml配置文件,并忽略任何log4j.xml或log4j.properties文件。如果log4j2找不到配置文件,它将使用默认配置,该配置仅将ERROR级别消息记录到控制台。我认为这就是正在发生的事情。

要解决此问题,请在名为log4j2.xml的文件下创建,并将其放在类路径中。

<Configuration status="warn" name="MyApp" packages="">
  <Appenders>
    <Console name="STDOUT" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/>
    </Console>
  </Appenders>
  <Loggers>
    <Root level="info">
      <AppenderRef ref="STDOUT"/>
    </Root>
  </Loggers>
</Configuration>