복붙노트

[SCALA] 어떻게 플레이에 Logger.debug 출력을 강제로! 프레임 워크 specs2 테스트?

SCALA

어떻게 플레이에 Logger.debug 출력을 강제로! 프레임 워크 specs2 테스트?

응용 프로그램을 테스트 할 때 기본적으로 응용 프로그램이 실행 중일 때 눈에 보이는 모든 로거 출력은 뮤트입니다.

어떻게 디버깅을 강제로 등의 정보를 정기적으로는 specs2의 보고서에 표시 할?

해결법

  1. ==============================

    1.첫째로, 당신은 로깅 테스트 모드에서 사용할 수있는 이유 몇 가지 배경을하실 수 있습니다. 이 플레이 포럼 (이 스레드를 참조)의 질문에 Guillame BORT의 대답했다 :

    첫째로, 당신은 로깅 테스트 모드에서 사용할 수있는 이유 몇 가지 배경을하실 수 있습니다. 이 플레이 포럼 (이 스레드를 참조)의 질문에 Guillame BORT의 대답했다 :

    해결 방법으로,이 (스칼라 코드)처럼 내 자신의 로거를 생성 :

    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"
    
  2. ==============================

    2.당신이 FakeApplication을 사용하는 경우 일부 구성 정보를 전달할 수 있습니다 :

    당신이 FakeApplication을 사용하는 경우 일부 구성 정보를 전달할 수 있습니다 :

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

    디버그 및 더 높은 출력에 그 한계 로거 출력.

    나는 설정이 "끈끈한"는 것을 관찰 할 수 놀랐습니다. 초기 테스트는 FakeApplication, FakeApplication 여전히 같은 로깅 수준을 사용합니다 사용하지 않는 나중에 테스트를 사용하는 경우.

  3. ==============================

    3.나는 이와 같은 conf의 아래 logger.xml 파일을 만든 :

    나는 이와 같은 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>
    

    그럼 다음 명령을 내 플레이 환경을 시작합니다

    짜잔! 테스트 데이터를 로깅. 그것은 메모리 누수로 이어질 않지만, 개발시 매우 유용합니다.

  4. ==============================

    4.당신이 (재생 기본적으로 수행하는) 테스트를 실행 SBT를 사용하는 경우 사용 로깅 구성을 제어하기 위해 테스트 작업에 javaOptions을 설정할 수 있습니다.

    당신이 (재생 기본적으로 수행하는) 테스트를 실행 SBT를 사용하는 경우 사용 로깅 구성을 제어하기 위해 테스트 작업에 javaOptions을 설정할 수 있습니다.

    예를 들어, 프로젝트 / Build.scala :

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

    여기에 테스트 logger.xml 파일의 구문에 대한 자세한 :

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

  5. ==============================

    5.당신이 재생 로거 소스를 보면, 당신은 로깅 테스트 모드에서 사용할 수 없습니다 볼 수 있습니다.

    당신이 재생 로거 소스를 보면, 당신은 로깅 테스트 모드에서 사용할 수 없습니다 볼 수 있습니다.

    당신이 정말로 로깅을 원한다면, 당신은 시험에 대한 로깅 구성 파일을 생성하고 시스템 속성 "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
    
  6. from https://stackoverflow.com/questions/11597102/how-to-force-logger-debug-output-in-play-framework-specs2-tests by cc-by-sa and MIT license