2017-03-16 11 views
2

PlayFrameworkの内部ログに問題があります。PlayFrameworkのログ依存関係を処理する方法

私は、Playの内部ログと明らかに衝突する"org.slf4j", "slf4j-log4j12"を持っているような依存関係があります。現在のフォームでは、compile時にそれは私にこの例外を与える:そして

java.lang.ClassCastException: org.slf4j.impl.Log4jLoggerFactory cannot be cast to ch.qos.logback.classic.LoggerContext 
    at play.api.libs.logback.LogbackLoggerConfigurator.configure(LogbackLoggerConfigurator.scala:80) 
    at play.api.libs.logback.LogbackLoggerConfigurator.init(LogbackLoggerConfigurator.scala:26) 
    at play.core.server.DevServerStart$$anonfun$mainDev$1.apply(DevServerStart.scala:94) 
    at play.core.server.DevServerStart$$anonfun$mainDev$1.apply(DevServerStart.scala:65) 
    at play.utils.Threads$.withContextClassLoader(Threads.scala:21) 
    at play.core.server.DevServerStart$.mainDev(DevServerStart.scala:64) 
    at play.core.server.DevServerStart$.mainDevHttpMode(DevServerStart.scala:54) 
    at play.core.server.DevServerStart.mainDevHttpMode(DevServerStart.scala) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at play.runsupport.Reloader$.startDevMode(Reloader.scala:234) 
    at play.sbt.run.PlayRun$$anonfun$playRunTask$1$$anonfun$apply$2$$anonfun$apply$3.devModeServer$lzycompute$1(PlayRun.scala:74) 
    at play.sbt.run.PlayRun$$anonfun$playRunTask$1$$anonfun$apply$2$$anonfun$apply$3.play$sbt$run$PlayRun$$anonfun$$anonfun$$anonfun$$devModeServer$1(PlayRun.scala:74) 
    at play.sbt.run.PlayRun$$anonfun$playRunTask$1$$anonfun$apply$2$$anonfun$apply$3.apply(PlayRun.scala:100) 
    at play.sbt.run.PlayRun$$anonfun$playRunTask$1$$anonfun$apply$2$$anonfun$apply$3.apply(PlayRun.scala:53) 
    at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47) 

しかし、それはそれは、コンパイルになり除く:いくつかのため

play.api.http.HttpErrorHandlerExceptions$$anon$1: Execution exception[[SerializationException: java.lang.ClassNotFoundException: org.slf4j.impl.Log4jLoggerAdapter]] 
    at play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:293) 
    at play.api.http.DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:220) 
    at play.api.GlobalSettings$class.onError(GlobalSettings.scala:160) 
    at play.api.DefaultGlobal$.onError(GlobalSettings.scala:188) 
    at play.api.http.GlobalSettingsHttpErrorHandler.onServerError(HttpErrorHandler.scala:100) 
    at play.core.server.netty.PlayRequestHandler$$anonfun$2$$anonfun$apply$1.applyOrElse(PlayRequestHandler.scala:100) 
    at play.core.server.netty.PlayRequestHandler$$anonfun$2$$anonfun$apply$1.applyOrElse(PlayRequestHandler.scala:99) 
    at scala.concurrent.Future$$anonfun$recoverWith$1.apply(Future.scala:346) 
    at scala.concurrent.Future$$anonfun$recoverWith$1.apply(Future.scala:345) 
    at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32) 
Caused by: org.apache.commons.lang.SerializationException: java.lang.ClassNotFoundException: org.slf4j.impl.Log4jLoggerAdapter 
    at org.apache.commons.lang.SerializationUtils.deserialize(SerializationUtils.java:166) 
    at org.apache.commons.lang.SerializationUtils.deserialize(SerializationUtils.java:193) 
    at edu.illinois.cs.cogcomp.core.utilities.SerializationHelper.deserializeTextAnnotationFromBytes(SerializationHelper.java:124) 
    at edu.illinois.cs.cogcomp.pipeline.server.ServerClientAnnotator.annotate(ServerClientAnnotator.java:114) 
    at org.allenai.ari.solvers.textilp.solvers.TextILPSolver.solve(TextILPSolver.scala:195) 
    at controllers.SolveQuestion$$anonfun$solve$1.apply(SolveQuestion.scala:134) 
    at controllers.SolveQuestion$$anonfun$solve$1.apply(SolveQuestion.scala:89) 
    at play.api.mvc.ActionBuilder$$anonfun$apply$13.apply(Action.scala:371) 
    at play.api.mvc.ActionBuilder$$anonfun$apply$13.apply(Action.scala:370) 
    at play.api.mvc.Action$.invokeBlock(Action.scala:498) 
Caused by: java.lang.ClassNotFoundException: org.slf4j.impl.Log4jLoggerAdapter 

projectDependencies := { 
     Seq((projectID in root).value.exclude("org.slf4j", "slf4j-log4j12")) 
    } 

しかし、実行時例外を与えます私のシステムの内部コンポーネントはこのログを使用します。任意のアイデアはどのようにこのログ依存性の悪夢を修正するには?

+0

私は正確に同じ問題を持っていますが、私は、依存関係の解決のためにcoursierを使用しようとしているときにのみ発生します。これをどうやって解決しましたか? – SeDav

答えて

0

log4j依存関係は、プロジェクト全体からではなく、競合するパッケージからのみ除外する必要があります。

例:

libraryDependencies += "tf56" % "risk" % "1.0.3" exclude("org.slf4j", "slf4j-log4j12") 
+0

同じ効果はありませんか? – Daniel

関連する問題