Anda dapat menghasilkan proyek dari start.spring.io untuk masalah ini dari https://start.spring.io/starter.zip?type=gradle-project&language=java&bootVersion=2.2.5.RELEASE&baseDir=demo&groupId=com.example&artifactId=demo&name = demo & deskripsi = Demo% 20proyek% 20untuk% 20Spring% 20Boot & packageName = com.example.demo & packaging = jar & javaVersion = 1.8 & dependensi = h2, data-jpa, web
Saya memiliki aplikasi springBoot multi-modul yang dibangun dengan gradle, ada banyak tes integrasi SpringBoot. Ketika saya melakukan build saya berakhir dengan beberapa output dari shutdown SpringBoot ke konsol seperti yang ditunjukkan di bawah ini. Bagaimana cara mematikan output ini?
± |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
Untuk referensi aplikasi yang dibuat dari start.spring.io dengan gradle tidak menghasilkan output di layar
./gradlew build
BUILD SUCCESSFUL in 779ms
5 actionable tasks: 5 up-to-date
Sebagai gantinya output ditempatkan build/reports/
Dalam kasus saya, saya belum membuat perubahan pada konfigurasi logging yang datang dengan boot. Tidak ada logback.xml, atau perubahan pada application.yml untuk level logging. Saya berharap gradle menangkap sistem keluar dan kesalahan sistem dan mengirimkannya ke build/reports/
tetapi beberapa output tampaknya lolos ke sistem keluar.
INFO
(atau menghapus sepenuhnya).INFO
garis level log. Mereka berasal dari kait shutdown seperti yang Anda lihat, dan mereka berakhir di mana pun logging dikonfigurasi. Saya kira secara teori pesan mungkin berakhir di tempat yang berbeda dari yang dimaksudkan, karena konfigurasi logging berubah dan kait dieksekusi secara asinkron sesudahnya. Jadi itu akan default garis-garis tersebut ke konsol, karena konfigurasi sebelumnya diturunkan. Mungkin.Jawaban:
@ Eskatos benar. Manajer logging diruntuhkan setelah kasus uji dieksekusi sebelum mematikan proses pekerja. Semua kait pematian dieksekusi ketika proses pekerja dimatikan dan diarahkan kembali ke konsol.
Karena pesan-pesan ini dihasilkan oleh spring boot, tempat terbaik adalah memfilter pesan-pesan shutdown menggunakan konfigurasi tes logback xml.
Sesuatu seperti logback-test.xml di dalam src / test / resources
build.gradle
sumber
Satu dapat menonaktifkan output dengan atau memutuskan apa yang harus log dari tugas, untuk mengontrol stdout / stderr dari JVM uji:
TestLoggingContainer
testLogging.showStandardStreams = false
onOutput
Test
Aliran ini adalah
TestLogEvent
STANDARD_OUT
&STANDARD_ERROR
, yang berasal dari JVM. Ketika seseorang dapat menentukan suatuevent.message
mengandungextShutdownHook
, seseorang dapat melewati pencatatan.sumber
INFO
ini adalah level logging default untuk Spring; seseorang dapat mengatur level log lainnya, mis.logging.level.org.springframework=TRACE
sebagai variabel lingkungan.Saya bisa menyembunyikan data-logging khusus pegas-data (berdasarkan pegas-starter ini ) dengan menambahkan follwoing
application.properties
ke src / test / resources:logging.level.org.springframework
tidak akan berpengaruh pada mis.com.zaxxer.hikari
logger, tetapi Anda memiliki opsi fleksibel di sini.(
root=ERROR
seperti "pendekatan palu godam").(
src/main/resources
juga dimungkinkan tetapi memiliki efek tidak hanya pada pengujian tetapi juga saat runtime aplikasi) (application.properties
hanya satu dari banyak "lokasi" yang mungkin untuk properti ini ... lihat juga: https://docs.spring.io/spring-boot/ docs / current / reference / html / appendix-application-properties.html )Dengan ini saya mendapatkan output gradle "silent", juga pada
clean build
:sumber
Gradle memiliki mode senyap.
./gradlew build -q
Tetapi Anda masih membutuhkan informasi tentang tes. Anda dapat menggunakan jacoco dan sonarqube. Ini bekerja untuk saya di sini dan di sini .
sumber