AkkaとAkka-httpを使用してシンプルなサーバーを開発しています。
IntelliJにアプリケーションを実行すると、標準出力に次のエラーメッセージが常に表示されます。
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'
そして、私は以下に示すようにapplication.confを持っています:
akka {
loggers = ["akka.event.slf4j.Slf4jLogger"]
loglevel = "INFO"
stdout-loglevel = "INFO"
logging-filter = "akka.event.slf4j.Slf4jLoggingFilter"
...
}
そして最後に、私はこのようにロギングを使用しています:
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)
なぜ私がいつもそのエラーステートメントを受け取るのか誰か知っていますか?
SLF4Jバックエンドを提供する必要があります-Akka docs Logbackを推奨します。
これは、以下のように依存関係に追加することで実現されます。コンパイル時に必要ないため、依存関係にRuntime
のフラグを設定することもできます。
libraryDependencies += "ch.qos.logback" % "logback-classic" % "1.1.3" % Runtime
これはAkkaの特定の要件ではないことに注意してください。 SLF4J はファサードにすぎず、常にロギングバックエンドが必要です。
また、Logbackを選択した場合は、logback.xml
ファイルにログ設定を提供することをお勧めします。参照については this answer を参照してください。
Akka内でのロギングについて知っておく必要があるのは docs だけです。