无法从SLF4J

时间:2017-03-04 16:37:51

标签: scala log4j akka slf4j

我正在使用Akka和Akka-http开发一个简单的服务器。

当我将应用程序运行到IntelliJ中时,我总是在stdout中收到以下错误消息:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

我在build.gradle中有以下依赖项:

compile 'org.scala-lang:scala-library:2.12.1'
compile 'com.typesafe.akka:akka-actor_2.12:2.4.17'
compile 'com.typesafe.akka:akka-stream_2.12:2.4.17'
compile 'com.typesafe.akka:akka-http_2.12:10.0.4'
compile 'com.typesafe.akka:akka-http-spray-json_2.12:10.0.4'
compile 'com.typesafe.akka:akka-slf4j_2.12:2.4.17'

我有app.conf,如下所示:

akka {
  loggers = ["akka.event.slf4j.Slf4jLogger"]
  loglevel = "INFO"
  stdout-loglevel = "INFO"
  logging-filter = "akka.event.slf4j.Slf4jLoggingFilter"
  ...
}

最后,我正在使用Logging:

object HttpServer extends App with JsonSupport {
  override def main(args: Array[String]): Unit = {

  val config = ConfigFactory.load()

  implicit val system = ActorSystem(config.getString("application.actor-system"))
  implicit val materializer = ActorMaterializer()

  // needed for the future flatMap/onComplete in the end
  implicit val executionContext = system.dispatcher

  val logger = Logging(system, getClass)

任何人都可以知道我为什么总是得到错误陈述?

1 个答案:

答案 0 :(得分:17)

您需要提供SLF4J后端 - Akka docs建议使用Logback。

这可以通过将其添加到您的依赖项来实现,如下所示。您可能还希望将依赖项标记为Runtime,因为它不需要编译时。

libraryDependencies += "ch.qos.logback" % "logback-classic" % "1.1.3" % Runtime

请注意,这不是Akka的具体要求。 SLF4J只是一个外观,并且始终需要记录后端。

另请注意,如果您选择Logback,建议您提供包含日志记录设置的logback.xml文件,请参阅this answer以获取参考。

有关在Akka内登录的所有信息都在docs