无法从SLF4J加载类"org.slf4j.impl.StaticLoggerBinder"消息错误

Ser*_*lvo 10 log4j scala slf4j akka

我正在使用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.
Run Code Online (Sandbox Code Playgroud)

我在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'
Run Code Online (Sandbox Code Playgroud)

我有app.conf,如下所示:

akka {
  loggers = ["akka.event.slf4j.Slf4jLogger"]
  loglevel = "INFO"
  stdout-loglevel = "INFO"
  logging-filter = "akka.event.slf4j.Slf4jLoggingFilter"
  ...
}
Run Code Online (Sandbox Code Playgroud)

最后,我正在使用这样的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)
Run Code Online (Sandbox Code Playgroud)

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

Ste*_*tti 19

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

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

libraryDependencies += "ch.qos.logback" % "logback-classic" % "1.1.3" % Runtime
Run Code Online (Sandbox Code Playgroud)

请注意,这不是Akka的具体要求. SLF4J只是一个外观,总是需要一个日志记录后端.

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

有关在Akka内登录的所有信息,请参阅文档.

  • 这对我有用 - 摆脱了警告,但我得到了几个屏幕值得调试和信息日志.上述答案中的文档链接有助于[此答案](/sf/answers/2240273521/)(基本上,添加`logback.xml`并根据​​需要进行配置). (2认同)