2017-01-02 8 views
1

Play 프레임 워크 테스트 케이스에서 로깅을 시도하고 싶습니다. 이 문제를 해결하는 한 가지 방법은 logback-classic과 같은 다른 구현 대신 클래스 경로에서 slf4j-nop jar를 사용하는 것입니다. 나는 아래에 보이는 것처럼 이것을 sbt에서 할 수 있었다. 내 테스트 Play 스칼라 : Nop Logger를 사용하여 로깅을 줄이기 위해 테스트합니다.

[info] Exception encountered when attempting to run a suite with class name: JobControllerSpec *** ABORTED *** 
[info] java.lang.NoClassDefFoundError: ch/qos/logback/classic/LoggerContext 
[info] at play.api.libs.logback.LogbackLoggerConfigurator.configure(LogbackLoggerConfigurator.scala:80) 
[info] at play.api.libs.logback.LogbackLoggerConfigurator.configure(LogbackLoggerConfigurator.scala:62) 
[info] at play.api.inject.guice.GuiceApplicationBuilder$$anonfun$applicationModule$1.apply(GuiceApplicationBuilder.scala:102) 
[info] at play.api.inject.guice.GuiceApplicationBuilder$$anonfun$applicationModule$1.apply(GuiceApplicationBuilder.scala:102) 
[info] at scala.Option.foreach(Option.scala:257) 
[info] at play.api.inject.guice.GuiceApplicationBuilder.applicationModule(GuiceApplicationBuilder.scala:101) 
[info] at play.api.inject.guice.GuiceBuilder.injector(GuiceInjectorBuilder.scala:181) 
[info] at play.api.inject.guice.GuiceApplicationBuilder.build(GuiceApplicationBuilder.scala:123) 
[info] at org.scalatestplus.play.OneAppPerSuite$class.app(OneAppPerSuite.scala:126) 
[info] at JobControllerSpec.app$lzycompute(JobControllerSpec.scala:12) 
[info] ... 
[info] Cause: java.lang.ClassNotFoundException: ch.qos.logback.classic.LoggerContext 
[info] at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
[info] at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
[info] at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
[info] at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
[info] at play.api.libs.logback.LogbackLoggerConfigurator.configure(LogbackLoggerConfigurator.scala:80) 
[info] at play.api.libs.logback.LogbackLoggerConfigurator.configure(LogbackLoggerConfigurator.scala:62) 
[info] at play.api.inject.guice.GuiceApplicationBuilder$$anonfun$applicationModule$1.apply(GuiceApplicationBuilder.scala:102) 
[info] at play.api.inject.guice.GuiceApplicationBuilder$$anonfun$applicationModule$1.apply(GuiceApplicationBuilder.scala:102) 
[info] at scala.Option.foreach(Option.scala:257) 
[info] at play.api.inject.guice.GuiceApplicationBuilder.applicationModule(GuiceApplicationBuilder.scala:101) 

logback 클래식 LogbackLoggerConfigurator.scala에서의 하드 의존성이 왜

을 실행할 때

libraryDependencies += "org.slf4j" % "slf4j-nop" % "1.7.6" % "test" 

(dependencyClasspath in Test) <<= (dependencyClasspath in Test) map { 
    _.filterNot(_.data.name.contains("logback-classic")) 
} 

하지만 난 여전히 아래 오류가?

[project] $ show libraryDependencies 
[info] List(org.scala-lang:scala-library:2.11.8, com.typesafe.play:twirl-api:1.1.1, com.typesafe.play:play-server:2.5.4, com.typesafe.play:play-test:2.5.4:test, com.typesafe.play:play-omnidoc:2.5.4:docs, com.typesafe.play:play-netty-server:2.5.4, com.typesafe.play:play-logback:2.5.4, com.typesafe.play:play-cache:2.5.4, com.typesafe.play:play-ws:2.5.4, com.typesafe.play:play-slick:2.0.0, com.typesafe.play:play-slick-evolutions:2.0.0, com.h2database:h2:1.4.187, mysql:mysql-connector-java:5.1.6, net.codingwell:scala-guice:4.1.0, org.scalatestplus.play:scalatestplus-play:1.5.0:test, org.slf4j:slf4j-nop:1.7.6:test) 

답변

0

내가 slf4j-nop와 아무 경험이 있지만 그래 그게 어떻게을 conf/logback.xml

+0

의 하나를 덮어 쓰게됩니다 test/resources/logback.xml에서 테스트를위한 특별한 logback 구성을 제공 할 수 있습니다 내 종속의 상태 문제를 해결했지만 위의 방법이 왜 효과가 없었으며 logback-classic의 컴파일 시간 의존성이 도입 된 이유를 이해하려고했습니다. –