28

デフォルトLoggerでは、アプリケーションの実行時に表示されるすべての出力は、アプリケーションのテスト時にミュートになります。

デバッグや情報などをspecs2レポートに強制的に表示するにはどうすればよいですか?

4

5 に答える 5

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)
    }
  }
}

PermGenリーク全般に関してこのコードがどのように動作するかはわかりませんが、これまでのところ、その問題は発生していません。それを機能させるには、この依存関係を追加する必要があります。

"org.slf4j" % "slf4j-simple" % "1.6.4"
于 2012-07-24T16:09:29.827 に答える
9

FakeApplicationを使用している場合は、いくつかの構成情報を渡すことができます。

  FakeApplication(additionalConfiguration = Map(
    "logger.application" -> "DEBUG"
  ))

これにより、LOGGERの出力がデバッグ以上の出力に制限されます。

設定が「ベタベタ」しているのを見てびっくりしました。初期のテストでFakeApplicationを使用する場合、FakeApplicationを使用しない後のテストでも同じログレベルが使用されます。

于 2014-01-31T19:11:23.427 に答える
6

次のような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

出来上がり!テストにデータを記録します。これはメモリリークにつながりますが、開発中に非常に貴重です。

于 2013-02-01T21:46:27.960 に答える
5

sbtを使用してテストを実行している場合(デフォルトではplayが実行します)、テストタスクでjavaOptionsを設定して、使用されるログ構成を制御できます。

例:project / Build.scala:

javaOptions in Test      += "-Dlogger.file=conf/test-logger.xml"

test-logger.xmlファイルの構文について詳しくは、こちらをご覧ください。

http://logback.qos.ch/manual/configuration.html

于 2014-04-24T09:08:48.103 に答える
3

Play Loggerソースを見ると、テストモードでログが無効になっていることがわかります。

本当にログが必要な場合は、テスト用のログ構成ファイルを作成し、システムプロパティ「logger.file」としてPlayに渡すことができます。

ロギング構成の例(プロジェクトルートのtest-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
于 2012-12-31T14:01:50.020 に答える