Mengatur Level Log di Spring Boot saat Menguji

1. Ikhtisar

Dalam tutorial ini, kami akan menunjukkan cara menyetel level log saat menjalankan pengujian untuk aplikasi Spring Boot .

Meskipun sebagian besar kami dapat mengabaikan log saat pengujian kami berhasil, memilih level log yang tepat bisa menjadi sangat penting jika ada kebutuhan untuk mendiagnosis pengujian yang gagal .

2. Pentingnya Tingkat Log

Mengonfigurasi level log dengan benar dapat menghemat banyak waktu.

Misalnya, jika pengujian gagal pada server CI tetapi meneruskan mesin pengembangan kami, kami tidak akan dapat mendiagnosis pengujian yang gagal kecuali kami memiliki keluaran log yang cukup . Di sisi lain, jika kita mencatat terlalu banyak detail, mungkin lebih sulit untuk menemukan informasi yang berguna.

Untuk mencapai jumlah detail yang tepat, kami dapat menyempurnakan tingkat pencatatan paket aplikasi kami. Jika kami menemukan bahwa paket Java lebih penting untuk pengujian kami, kami dapat memberikannya level yang lebih rendah, seperti DEBUG . Demikian pula, untuk menghindari terlalu banyak gangguan di log kami, kami dapat mengkonfigurasi tingkat yang lebih tinggi, katakanlah INFO atau ERROR, untuk paket yang kurang penting.

Mari jelajahi berbagai cara menyetel level logging.

3. Pengaturan Logging di application.properties

Jika kita ingin mengubah level log dalam pengujian kita, ada properti yang bisa kita setel di src / test / resources / application.properties :

logging.level.com.baeldung.testloglevel=DEBUG

Properti ini akan menyetel tingkat log khusus untuk paket com.baeldung.testloglevel .

Demikian pula, kita dapat mengubah level logging untuk semua paket dengan mengatur level log root :

logging.level.root=INFO

Sekarang, mari kita coba pengaturan logging kami dengan menambahkan titik akhir REST yang menulis beberapa log:

@RestController public class TestLogLevelController { private static final Logger LOG = LoggerFactory.getLogger(TestLogLevelController.class); @Autowired private OtherComponent otherComponent; @GetMapping("/testLogLevel") public String testLogLevel() { LOG.trace("This is a TRACE log"); LOG.debug("This is a DEBUG log"); LOG.info("This is an INFO log"); LOG.error("This is an ERROR log"); otherComponent.processData(); return "Added some log output to console..."; } }

Seperti yang diharapkan, jika kita memanggil titik akhir ini dalam pengujian kita , kita akan dapat melihat log DEBUG dari TestLogLevelController :

2019-04-01 14:08:27.545 DEBUG 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController : This is a DEBUG log 2019-04-01 14:08:27.545 INFO 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController : This is an INFO log 2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController : This is an ERROR log 2019-04-01 14:08:27.546 INFO 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent : This is an INFO log from another package 2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent : This is an ERROR log from another package 

Menyetel level log seperti ini cukup mudah, dan kami harus melakukannya dengan cara ini jika pengujian kami dianotasi dengan @SpringBootTest . Namun, jika kita tidak menggunakan anotasi itu, kita harus mengkonfigurasi tingkat log dengan cara yang berbeda.

3.1. Pengaturan Logging Berbasis Profil

Meskipun menempatkan pengaturan ke dalam src / test / application.properties akan berhasil dalam kebanyakan situasi, mungkin ada kasus di mana kami ingin memiliki pengaturan yang berbeda untuk satu pengujian atau sekelompok pengujian .

Dalam hal ini, kami dapat menambahkan profil Spring ke pengujian kami dengan menggunakan anotasi ActiveProfiles :

@RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT, classes = TestLogLevelApplication.class) @EnableAutoConfiguration(exclude = SecurityAutoConfiguration.class) @ActiveProfiles("logging-test") public class TestLogLevelWithProfileIntegrationTest { // ... }

Pengaturan logging kami kemudian akan berada di file application-logging-test.properties khusus dalam src / test / resources :

logging.level.com.baeldung.testloglevel=TRACE logging.level.root=ERROR

Jika kita memanggil TestLogLevelController dari pengujian kita dengan pengaturan yang dijelaskan, sekarang kita akan melihat log TRACE dari pengontrol kita, dan tidak akan ada lagi log INFO dari paket lain:

2019-04-01 14:08:27.545 DEBUG 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController : This is a DEBUG log 2019-04-01 14:08:27.545 INFO 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController : This is an INFO log 2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController : This is an ERROR log 2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent : This is an ERROR log from another package

4. Konfigurasi Logback

Jika kita menggunakan Logback, yang digunakan secara default di Spring Boot, kita dapat mengatur tingkat log di logback-test.xml berkas dalam src / test / sumber:

    %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n        

Contoh di atas menunjukkan cara menyetel level log dalam konfigurasi Logback untuk pengujian. Tingkat log akar disetel ke INFO dan tingkat log untuk paket com.baeldung.testloglevel kami disetel ke DEBUG .

Sekali lagi, mari kita periksa hasilnya setelah menerapkan pengaturan dari atas:

2019-04-01 14:08:27.545 DEBUG 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController : This is a DEBUG log 2019-04-01 14:08:27.545 INFO 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController : This is an INFO log 2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController : This is an ERROR log 2019-04-01 14:08:27.546 INFO 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent : This is an INFO log from another package 2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent : This is an ERROR log from another package 

4.1. Konfigurasi Logback Berbasis Profil

Cara lain untuk menyiapkan konfigurasi khusus profil untuk pengujian kami adalah dengan menyetel properti logging.config di application.properties untuk profil kami:

logging.config=classpath:logback-testloglevel.xml

Atau, lagi, mengatakan jika kita ingin memiliki konfigurasi tunggal Logback pada classpath kami, adalah dengan menggunakan springProfile elemen dalam logback.xml :

    %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n             

Sekarang, jika kita memanggil TestLogLevelController dalam pengujian kita dengan profil logback-test1 , kita akan mendapatkan keluaran berikut:

2019-04-01 14:08:27.545 INFO 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController : This is an INFO log 2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController : This is an ERROR log 2019-04-01 14:08:27.546 INFO 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent : This is an INFO log from another package 2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent : This is an ERROR log from another package 

Di sisi lain, Jika kita mengubah profil menjadi logback-test2 , hasilnya adalah:

2019-04-01 14:08:27.545 DEBUG 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController : This is a DEBUG log 2019-04-01 14:08:27.545 INFO 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController : This is an INFO log 2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController : This is an ERROR log 2019-04-01 14:08:27.546 INFO 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent : This is an INFO log from another package 2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent : This is an ERROR log from another package 

5. Alternatif Log4J

Atau, jika kita menggunakan Log4J2, kita dapat mengatur tingkat log di log4j2-spring.xml berkas dalam src / test / sumber:

Kita dapat mengatur jalur konfigurasi Log4J kita dengan mengatur properti logging.config di application.properties :

logging.config=classpath:log4j-testloglevel.xml

Terakhir, mari kita periksa hasilnya setelah menerapkan pengaturan di atas:

2019-04-01 14:08:27.545 DEBUG 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController : This is a DEBUG log 2019-04-01 14:08:27.545 INFO 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController : This is an INFO log 2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController : This is an ERROR log 2019-04-01 14:08:27.546 INFO 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent : This is an INFO log from another package 2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent : This is an ERROR log from another package 

6. Kesimpulan

Di artikel ini, kami telah mempelajari cara menyetel level log saat menguji aplikasi Spring Boot . Kami mempelajari sejumlah cara berbeda untuk mengonfigurasinya.

Menyetel level log di application.properties Spring Boot menunjukkan dirinya sebagai yang termudah, terutama saat kita menggunakan anotasi @SpringBootTest .

Seperti biasa, kode sumber untuk contoh ini berakhir di GitHub.