[SCALA] 어떻게 플레이에 Logger.debug 출력을 강제로! 프레임 워크 specs2 테스트?
SCALA어떻게 플레이에 Logger.debug 출력을 강제로! 프레임 워크 specs2 테스트?
응용 프로그램을 테스트 할 때 기본적으로 응용 프로그램이 실행 중일 때 눈에 보이는 모든 로거 출력은 뮤트입니다.
어떻게 디버깅을 강제로 등의 정보를 정기적으로는 specs2의 보고서에 표시 할?
해결법
-
==============================
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.당신이 FakeApplication을 사용하는 경우 일부 구성 정보를 전달할 수 있습니다 :
당신이 FakeApplication을 사용하는 경우 일부 구성 정보를 전달할 수 있습니다 :
FakeApplication(additionalConfiguration = Map( "logger.application" -> "DEBUG" ))
디버그 및 더 높은 출력에 그 한계 로거 출력.
나는 설정이 "끈끈한"는 것을 관찰 할 수 놀랐습니다. 초기 테스트는 FakeApplication, FakeApplication 여전히 같은 로깅 수준을 사용합니다 사용하지 않는 나중에 테스트를 사용하는 경우.
-
==============================
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.당신이 (재생 기본적으로 수행하는) 테스트를 실행 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.당신이 재생 로거 소스를 보면, 당신은 로깅 테스트 모드에서 사용할 수 없습니다 볼 수 있습니다.
당신이 재생 로거 소스를 보면, 당신은 로깅 테스트 모드에서 사용할 수 없습니다 볼 수 있습니다.
당신이 정말로 로깅을 원한다면, 당신은 시험에 대한 로깅 구성 파일을 생성하고 시스템 속성 "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
from https://stackoverflow.com/questions/11597102/how-to-force-logger-debug-output-in-play-framework-specs2-tests by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 쉬운 방법은 SBT에 의해 생성 * 모든 * 없애? (0) | 2019.11.26 |
---|---|
[SCALA] 간단한 빌드 도구를 사용하여 독립 실행 형 항아리 만들기 (0) | 2019.11.26 |
[SCALA] 중괄호 코드 블록으로 전달 함수 (0) | 2019.11.26 |
[SCALA] 거기 비록 SBT는 지역 받는다는 저장소에서 파일을 찾을 수 없습니다 (0) | 2019.11.26 |
[SCALA] 삼항 연산자 유사하려면? (0) | 2019.11.26 |