添加slf4j / logback时akka-http崩溃

时间:2017-06-17 11:12:56

标签: scala sbt akka akka-http akka-stream

我有一个有效的akka-http应用程序。现在我尝试通过slf4j和logback添加日志记录,我的应用程序崩溃了。

build.sbt

libraryDependencies ++= Seq(
  "com.typesafe.akka" %% "akka-http" % "10.0.7",
  "ch.qos.logback" % "logback-classic" % "1.2.3",
  "com.typesafe.akka" %% "akka-slf4j" % "2.5.2"
)

application.conf

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

logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="DEBUG">
        <appender-ref ref="STDOUT"/>
    </root>
</configuration>

错误:

  

检测到java.lang.NoSuchMethodError错误,可能由以下原因引起   类路径上不兼容的Akka版本。请注意一个给定的   Akka版本必须与Akka的所有模块相同   使用,例如如果你使用akka-actor [2.5.2(从当前解析   classpath)]所有其他核心Akka模块必须是相同的版本。   外部项目,如Alpakka,Persistence插件或Akka HTTP等。   有自己的版本号 - 请确保您使用的是   兼容的图书馆。

     

来自的未捕获错误   thread [my-system-akka.actor.default-dispatcher-6]关闭JVM   因为&#39; akka.jvm-exit-on-fatal-error&#39;已启用   ActorSystem [my-system] java.lang.NoSuchMethodError:   akka.actor.ActorCell.addFunctionRef(Lscala /功能2)拉卡/演员/ FunctionRef;

根据消息,这是一个兼容性问题。如何找出哪些版本的akka-httpakka-slf4j兼容(尝试除外)?

在旁注中,由于它是一个类似的问题:我想添加akka-stream。但是,使用最新版本的akka-httpakka-stream会在sbt中给出驱逐警告。与上述相同的问题:如何找出要使用的版本?

1 个答案:

答案 0 :(得分:2)

不幸的是,akka-httpakka的其他版本分开版本,其最新版本不一定使用akka的最新版本。如果是akka-http版本10.0.7,则兼容的akka版本为2.4.18。你可以看到它here。这意味着您需要在akka-slf4j依赖项中删除该版本以无问题地运行应用程序。