https://start.spring.io/starter.zip?type=gradle-project&language=java&bootVersion=2.2.5.RELEASE&baseDir=demo&groupId=com.example&artifactId=demo&name 에서 start.spring.io에서이 이슈까지 프로젝트를 생성 할 수 있습니다. = demo & description = Demo % 20project % 20for % 20Spring % 20Boot & packageName = com.example.demo & packaging = jar & javaVersion = 1.8 & dependencies = h2, data-jpa, web
gradle로 빌드 된 다중 모듈 springBoot 응용 프로그램이 있으며 SpringBoot 통합 테스트가 많이 있습니다. 빌드 할 때 아래 그림과 같이 SpringBoot 종료에서 콘솔로 출력됩니다. 이 출력을 어떻게 끄나요?
± |master ↑1 {1} S:3 U:10 ✗| → ./gradlew build
> Task :core:test
2020-02-01 11:20:33.529 INFO 24114 --- [extShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2020-02-01 11:20:33.531 INFO 24114 --- [extShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...
2020-02-01 11:20:33.538 INFO 24114 --- [extShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.
> Task :email:test
2020-02-01 11:20:43.820 INFO 24150 --- [extShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2020-02-01 11:20:43.820 INFO 24150 --- [extShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2020-02-01 11:20:43.822 INFO 24150 --- [extShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-2 - Shutdown initiated...
2020-02-01 11:20:43.822 INFO 24150 --- [extShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...
2020-02-01 11:20:43.830 INFO 24150 --- [extShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.
2020-02-01 11:20:43.830 INFO 24150 --- [extShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-2 - Shutdown completed.
> Task :security:test
2020-02-01 11:20:54.941 INFO 24188 --- [extShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2020-02-01 11:20:54.944 INFO 24188 --- [extShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...
2020-02-01 11:20:54.952 INFO 24188 --- [extShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.
Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.1.1/userguide/command_line_interface.html#sec:command_line_warnings
BUILD SUCCESSFUL in 46s
57 actionable tasks: 54 executed, 3 up-to-date
참조를 위해 gradle을 사용하여 start.spring.io에서 작성된 응용 프로그램은 화면에 출력을 생성하지 않습니다.
./gradlew build
BUILD SUCCESSFUL in 779ms
5 actionable tasks: 5 up-to-date
대신 출력은 build/reports/
필자의 경우 부트와 함께 제공되는 로깅 구성을 변경하지 않았습니다. logback.xml이 없거나 로깅 레벨을 위해 application.yml이 변경되었습니다. gradle이 시스템 및 시스템 오류를 캡처하여 시스템으로 보내는 것으로 예상 build/reports/
하지만 일부 출력은 시스템 출력으로 빠져 나가는 것 같습니다.
답변
@eskatos가 맞습니다. 작업자 프로세스를 종료하기 전에 테스트 케이스가 실행 된 후 로깅 관리자가 해제됩니다. 작업자 프로세스가 종료되고 콘솔로 다시 리디렉션되면 모든 종료 후크가 실행됩니다.
이러한 메시지는 스프링 부트로 생성되므로 로그 백 테스트 구성 xml을 사용하여 종료 메시지를 필터링하는 것이 가장 좋습니다.
src / test / resources 내부의 logback-test.xml과 같은 것
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<evaluator> <!-- defaults to type ch.qos.logback.classic.boolex.JaninoEventEvaluator -->
<expression>return event.getThreadName().contains("ShutdownHook");</expression>
</evaluator>
<OnMismatch>NEUTRAL</OnMismatch>
<OnMatch>DENY</OnMatch>
</filter>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
</configuration>
build.gradle
testCompile 'org.codehaus.janino:janino'
답변
하나는과 출력을 비활성화 할 수 있습니다 또는 로그할지 결정 (A)의 테스트 JVM의 표준 출력 / 표준 에러를 제어하기 위해, 작업 :TestLoggingContainer
testLogging.showStandardStreams = false
onOutput
Test
apply plugin: 'java'
test {
// show standard out and standard error of the test JVM on the console
// can be used to disable the console output:
testLogging.showStandardStreams = true
// listen to standard out and standard error of the test JVM
// can be used to make the logging optional:
onOutput { descriptor, event ->
logger.lifecycle("Test: " + descriptor + " produced standard out/err: " + event.message)
}
}
이 스트림은 TestLogEvent
STANDARD_OUT
& STANDARD_ERROR
이며 JVM에서 제공됩니다. event.message
포함을 결정할 수 있으면 extShutdownHook
로깅을 건너 뛸 수 있습니다.
답변
src / test / resources에 다음 을 추가하여 스프링 데이터 특정 테스트 로깅 ( 이 스프링 스타터 기반)을 숨길 수 있습니다.application.properties
logging.level.root=ERROR
logging.level.org.springframework
com.zaxxer.hikari
로거 에는 영향을 미치지 않지만 여기 에는 유연한 옵션이 있습니다.
( root=ERROR
“썰매 망치 접근”과 같습니다).
( src/main/resources
도 가능하지만 테스트에서뿐만 아니라 응용 프로그램 실행시뿐만 아니라 효과가 있습니다) ( application.properties
중 하나입니다 많은 수 “위치” 참조 또한 …이 속성 : https://docs.spring.io/spring-boot/ docs / current / reference / html / appendix-application-properties.html )
이것으로 나는 “자동”gradle 출력을 얻습니다 clean build
.
$ ./gradlew clean build
BUILD SUCCESSFUL in 10s
7 actionable tasks: 7 executed