Jak wymusić Loggera.Debuguj wyjście w Play! testy framework Spec 2?
Domyślnie wszystkie wyjście Logger
, widoczne podczas uruchamiania aplikacji, jest wyciszone podczas testowania aplikacji.
Jak wymusić debugs, infos itp. do pokazania w specs2
raportach?
5 answers
Po pierwsze, możesz polubić trochę tła, dlaczego logowanie jest wyłączone w trybie testowym. To była odpowiedź Guillame Bort na pytanie na forum play (Zobacz ten wątek):
Logger jest na razie wyłączony w trybie testowym, ponieważ powodował ogromny wyciek przestrzeni PermGen podczas testów. Ale pracujemy, aby uruchomić testy w rozwidlonym JVM, więc wkrótce włączymy go ponownie.
Jako obejście, stworzyłem swój własny logger w taki sposób (Kod 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)
}
}
}
I Nie wiem, jak ten kod zachowuje się w odniesieniu do przecieku PermGen w ogóle, ale jak na razie nie miałem tego problemu. Aby to działało, musisz dodać zależność:
"org.slf4j" % "slf4j-simple" % "1.6.4"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-24 16:09:29
Jeśli używasz FakeApplication, możesz przekazać pewne informacje o konfiguracji:
FakeApplication(additionalConfiguration = Map(
"logger.application" -> "DEBUG"
))
Które ogranicza wyjście LOGGERA do debugowania i wyższego wyjścia.
Byłem zaskoczony, gdy zauważyłem, że ustawienie jest "lepkie". Jeśli wczesny test wykorzystuje FakeApplication, późniejszy test, który nie używa FakeApplication, nadal będzie używał tego samego poziomu logowania.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-27 11:16:57
Stworzyłem logger.plik xml pod conf taki jak ten:
<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>
Następnie uruchamiam moje środowisko gry następującym poleceniem:
Voila! Logowanie danych w teście. Prowadzi to do wycieków pamięci, ale jest nieoceniona podczas rozwoju.Play-Dlogger.file=conf / logger.xml
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-01 21:46:27
Jeśli używasz SBT do uruchamiania testów (co play robi domyślnie), możesz ustawić javaOptions w zadaniu testowym, aby kontrolować używaną konfigurację logowania.
Np. w project / Build.scala:
javaOptions in Test += "-Dlogger.file=conf/test-logger.xml"
Więcej o składni test-loggera.plik xml tutaj:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-10 17:10:23
Jeśli spojrzysz na Play Logger source , zobaczysz, że logowanie jest wyłączone w trybie testowym.
Jeśli naprawdę chcesz logowania, możesz utworzyć plik konfiguracyjny logowania do testów i przekazać go do odtwarzania jako właściwość systemową " logger.plik".
Przykładowa konfiguracja logowania (test-logger.plik xml w korzeniu projektu):
<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>
Testy:
JAVA_OPTS="-Dlogger.file=test-logger.xml" play test
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-31 14:01:50