2017-03-16 59 views
2

我在PlayFramework內部的日誌記錄中遇到了一些問題。如何處理PlayFramework中的日誌依賴性

我有一個依賴關係,似乎將帶來"org.slf4j", "slf4j-log4j12"這顯然與Play的內部日誌衝突。在目前的形式,在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) 

但後來排除它使編譯:

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

但給人運行時異常:

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 

因爲有些我的系統的內部組件使用此日誌記錄。任何想法如何解決這個日誌依賴惡夢?

+0

我有完全一樣的問題,但是當我試圖用coursier爲解決依賴它纔會發生。你是如何解決這個問題的? – SeDav

回答

0

您需要僅從衝突包中排除log4j依賴項,而不是從整個項目中排除。

例子:

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

它們不應該具有相同的效果嗎? – Daniel