Raj*_*ish 26 scala playframework specs2 playframework-2.0
默认情况下Logger,在应用程序运行时可见的所有输出在测试应用程序时都是静音的.
如何强制在specs2报告中显示调试,信息等?
rin*_*ius 21
首先,您可能想了解为什么在测试模式下禁用日志记录的背景知识.这是Guillame Bort对游戏论坛中一个问题的回答(见本帖):
记录器暂时在测试模式下被禁用,因为它在运行测试时导致巨大的PermGen空间泄漏.但我们正在努力在分叉的JVM中运行测试,以便我们很快再次启用它.
作为一种解决方法,我创建了我自己的记录器(Scala代码):
import play.api.{Play, LoggerLike, Logger}
import org.slf4j.LoggerFactory
import org.slf4j.impl.SimpleLoggerFactory
object MyLogger extends LoggerLike {
val factory = if (Play.isTest(Play.current)) {
new SimpleLoggerFactory()
} else {
LoggerFactory.getILoggerFactory
}
val redirectDebugToInfo = factory.isInstanceOf[SimpleLoggerFactory]
val logger = factory.getLogger("application")
def apply(name: String): Logger = new Logger(factory.getLogger(name))
def apply[T](clazz: Class[T]): Logger = new Logger(factory.getLogger(clazz.getCanonicalName))
// this method is to make debug statements to show up in test mode
override def debug(m: => String) = {
if (redirectDebugToInfo) {
info(m)
} else {
super.debug(m)
}
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道这个代码在PermGen漏洞方面的表现如何,但到目前为止我没有遇到这个问题.要使其工作,您需要添加此依赖项:
"org.slf4j" % "slf4j-simple" % "1.6.4"
Run Code Online (Sandbox Code Playgroud)
如果您正在使用FakeApplication,则可以传递一些配置信息:
FakeApplication(additionalConfiguration = Map(
"logger.application" -> "DEBUG"
))
Run Code Online (Sandbox Code Playgroud)
这限制了LOGGER输出到调试和更高的输出.
我惊讶地发现这个设置是"粘性的".如果早期测试使用FakeApplication,则稍后不使用FakeApplication的测试仍将使用相同的日志记录级别.
我在conf下创建了一个logger.xml文件,如下所示:
<configuration>
<conversionRule conversionWord="coloredLevel" converterClass="play.api.Logger$ColoredLevel" />
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder><pattern>%coloredLevel %logger{15} - %message%n%xException{5}</pattern></encoder>
</appender>
<logger name="play" level="ERROR" />
<logger name="application" level="INFO" />
<root level="ERROR">
<appender-ref ref="STDOUT" />
</root>
</configuration>
Run Code Online (Sandbox Code Playgroud)
然后我使用以下命令启动我的播放环境:
play -Dlogger.file = conf/logger.xml
瞧!在测试中记录数据.它确实会导致内存泄漏,但在开发过程中非常宝贵.
如果您使用 sbt 运行测试(默认情况下播放),您可以在测试任务中设置 javaOptions 来控制使用的日志配置。
例如,在 project/Build.scala 中:
javaOptions in Test += "-Dlogger.file=conf/test-logger.xml"
Run Code Online (Sandbox Code Playgroud)
有关 test-logger.xml 文件语法的更多信息,请访问:
http://logback.qos.ch/manual/configuration.html