默认情况下,所有的Logger
输出,应用程序运行时可见,当应用程序测试的是静音。
如何强制(1)调试,在显示的相关信息等。 specs2
报告?
默认情况下,所有的Logger
输出,应用程序运行时可见,当应用程序测试的是静音。
如何强制(1)调试,在显示的相关信息等。 specs2
报告?
首先,你可能也会喜欢的背景,为什么记录在测试模式下被禁用。 这是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)
}
}
}
我不知道这个代码的行为有关常规PermGen的泄漏,但到目前为止,我没有这个问题。 为了使它工作,你需要添加这种依赖性:
"org.slf4j" % "slf4j-simple" % "1.6.4"
如果您使用FakeApplication,你可以通过一些配置信息:
FakeApplication(additionalConfiguration = Map(
"logger.application" -> "DEBUG"
))
这限制了记录器输出到调试和更高的输出。
我很惊讶地看到,设置为“粘性”。 如果早期的测试使用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>
然后我开始用下面的命令播放环境:
玩-Dlogger.file =的conf / logger.xml
瞧! 在测试记录数据。 它确实导致内存泄漏,但在开发过程中非常宝贵的。
如果您使用SBT运行测试(其中扮演默认完成了),你可以在测试任务设置javaOptions控制使用的日志记录配置。
例如,在项目/ Build.scala:
javaOptions in Test += "-Dlogger.file=conf/test-logger.xml"
更多关于这里的测试logger.xml文件的语法:
http://logback.qos.ch/manual/configuration.html
如果你看看播放记录器源 ,你会看到,记录在测试模式下被禁用。
如果你真的想记录,您可以创建测试日志配置文件,并把它传递给扮演系统属性“logger.file”。
例如日志配置(在项目根测试logger.xml文件):
<configuration>
<conversionRule conversionWord="coloredLevel" converterClass="play.api.Logger$ColoredLevel" />
<logger name="application" level="INFO">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%coloredLevel %logger{15} - %message%n%xException{5}</pattern>
</encoder>
</appender>
</logger>
</configuration>
运行测试:
JAVA_OPTS="-Dlogger.file=test-logger.xml" play test