Dalam aplikasi Java, log umumnya dibagi menjadi 5 level berikut:
Spring Boot menggunakan Apache's Commons Logging sebagai Kerangka Pencatatan Internal. Itu hanya antarmuka log. Dalam aplikasi aktual, perlu untuk menentukan implementasi log yang sesuai untuk antarmuka ini.
Implementasi log default SpringBT adalah Java Util Logging, yang merupakan paket log yang dibangun ke dalam JDK. Selain itu, SpringBT juga mendukung implementasi log yang sangat populer seperti log4j dan logback.
Implementasi log di atas secara kolektif disebut sebagai kerangka kerja log
Mari kita berlatih di bawah ini!
Menggunakan plugin Logging Spring Boot
Pertama tambahkan konfigurasi ke file application.properties:
logging.level.root = info
Kode pengontrol adalah sebagai berikut:
Paket com.hansonwang99.controller; import com.hansonwang99.k8sresctrlapplication; impor org.slf4j.logger; impor org.slf4j.loggerFactory; impor org.springframework.web.bind.notation.getmapping; org.springframework.web.bind.annotation.requestmapping; impor org.springframework.web.bind.annotation.RestController;@restcontroller@requestMapping ("/testlogging") Public ClassTestController {private static Logger Logger = LoggerFactory.getLogger (k8sresctrlapplication.class); @GetMapping ("/hello") Public String Hello () {Logger.info ("Test Logging ..."); Kembalikan "Halo"; }}Hasil berjalan
Karena level log diatur ke info, informasi log yang berisi info dan di atas akan dicetak
Seperti yang dapat dilihat di sini, sebagian besar log info berasal dari kerangka kerja Springbt itu sendiri. Jika kami ingin memblokirnya, kami dapat mengatur level log terlebih dahulu, sehingga informasi info dari kerangka kerja itu sendiri tidak akan dicetak. Kemudian atur paket spesifik dalam aplikasi ke log level debug, sehingga Anda hanya dapat melihat log level debug dalam paket yang Anda khawatirkan.
Mengontrol level log paket tertentu
Ubah konfigurasi di application.yml
Logging: Level: Root: Error com.hansonwang99.controller: debug
Jelas bahwa level log root disetel ke kesalahan, dan kemudian level log dari paket com.hansonwang99.controller diatur ke debug, yang berarti: pertama melarang semua pengaturan dan kemudian memungkinkan pengaturan individual.
Kode pengontrol
Paket com.hansonwang99.controller; impor org.slf4j.logger; impor org.slf4j.loggerFactory; impor org.springframework.web.bind.annotation.getMapping; import org.springframework.web.bind.annotation.requespapping; impor lququspringframework.web.bind.annotation.request; org.springframework.web.bind.annotation.RestController;@restcontroller@requestMapping ("/testlogging") kelas publik LoggingTestController {private Logger Logger = loggerFactory.getLogger (this.getClass ()); @GetMapping ("/hello") Public String Hello () {Logger.info ("Test Logging ..."); Kembalikan "Halo"; }}Hasil berjalan
Dapat dilihat bahwa kerangka kerja itu sendiri memiliki semua log tingkat info tersembunyi, dan log dalam paket yang ditentukan berhasil dicetak sesuai dengan level.
Output log ke file
Logging: Level: Root: error com.hansonwang99.controller: file debug: $ {user.home} /logs/hello.logHasil berjalan
Menggunakan Logging Spring Boot, kami menemukan bahwa meskipun log telah output ke file, salinan masih akan dicetak di konsol. Kami menemukan bahwa menggunakan org.slf4j.Logger tidak dapat menyelesaikan masalah ini
Kerangka Log Log4J Terpadu
Tambahkan dependensi di pom.xml
<dependency> <GroupId> org.springframework.boot </groupid> <ArTifactId> Spring-boot-starter-web </artifactid> <celuctions> <scuxcusion> <groupid> org.springframework.boot </groupid> <ArtiFacTid> Spring-b OOT-starter-logging </artifactid> </cksuccusion> </excupsions> </dependency> <dependency> <groupid> org.springframework.boot </groupid> <ArtiFacTID> Spring-boot-starter-log4j2 </arttifactid> </dependensi>
Tambahkan file log4j2.xml di direktori sumber daya, kontennya adalah sebagai berikut:
<?xml version="1.0" encoding="UTF-8"?><configuration> <appenders> <File name="file" fileName="${sys:user.home}/logs/hello2.log"> <PatternLayout pattern="%d{HH:mm:ss,SS} %p %c (%L) - %m%n"/> </File> </appenders> <toggers> <root level = "error"> <appender-ref ref = "file"/> </root> <logger name = "com.hansonwang99.controller" level = "debug"/> </toggers> </configuration>Kode lainnya tetap sama
Menjalankan program menemukan bahwa konsol tidak memiliki output log, dan ada konten dalam file hello2.log, yang sejalan dengan harapan kami:
Dan format log cocok dengan definisi dalam pattern="%d{HH:mm:ss,SSS} %p %c (%L) - %m%n" format "
Log4j mengambil latihan lebih lanjut
Konfigurasi pom.xml:
<dependency> <GroupId> org.springframework.boot </groupid> <ArTifactId> Spring-boot-starter-web </artifactid> <celuctions> <scuxcusion> <groupid> org.springframework.boot </groupid> <ArtiFacTid> Spring-b OOT-starter-logging </artifactid> </cksuccusion> </excupsions> </dependency> <dependency> <groupid> org.springframework.boot </groupid> <ArtiFacTID> Spring-boot-starter-log4j2 </arttifactid> </dependensi>
Konfigurasi log4j2.xml
<? Xml Version = "1.0" encoding = "UTF-8"?> <status konfigurasi = "warn"> <properties> <properti nama = "app_name"> springboot-web </proper pola = "[%d] [%t] [%p] [%l]%m%n"/> </console> <rollingfile name = "rollingfileInfo" filename = "$ {log_path} /info.log" filePattern="${log_path}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log.gz"> <Filters> <ThresholdFilter level="INFO" /> <ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL" /> </Filters> <PatternLayout pola = "[%d] [%t] [%p] [%c:%l]%m%n" /> <policies> <!-arsip file harian-> <timebasedtriggeringpolicy interval = "1" modulate = "true" /> <!-membatasi ukuran file tunggal-> <sizedtriggeringingpolice ukuran kolkum = "2 mb" <DefaultrolloverStrategy compressionlevel = "0" max = "10"/> </rollingfile> <rollingfile name = "rollingfileWarn" filename = "$ {log_path} /warn.log" filepattern = "$ {log_path}/$$ {tanggal: yyyy-mm}/warn-%d {yyyy-mm-dd}-%i.log.gz"> <filters> <thresholdfilter level = "warn"/<thresholdfilter level pola = "[%d] [%t] [%p] [%c:%l]%m%n" /> <policies> <!-arsip file harian-> <timebasedtriggeringpolicy interval = "1" modulate = "true" /> <!-membatasi ukuran file tunggal-> <sizedtriggeringingpolice ukuran kolkum = "2 mb" <DefaultrolloverStrategy compressionlevel = "0" max = "10"/> </rollingfile> <rollingfile name = "rollingfileError" filename = "$ {log_path} /error.log" filepattern = "$ {log_path} /$$ {tanggal: yyyy-mm} /error-%d {yyyy-mm-dd}-%i.log.gz"> <thresholdFilter level = "kesalahan" /<polaLayout pola = "[%d] [%t] [%p] [%c] [%c] <patterlayout pola ="%d] [%t] [%p] [%c] [%c] <pat pola] "%n /%n /%n /%d] [%t] [%p] [%c] [%l] <p Patternlayout =" [%d] [%t] [%p] [%l] [%l] <p Pattern "n n n n /%n /%n /%l] [%l] [%l] [%l] [%l] [%l] [%l] [%l] [%l] [%l] [%l] [%l] [%l] [%l] [%l] [%l] [%l] [%m <Timebasedtrigeringpolicy interval = "1" modulate = "true"/> <!-Batasi ukuran file tunggal-> <sizeBaseTrigeringPolicy size = "2 mb"/> </solicies> <!-Batasi jumlah file per hari-> <defaultrolloverstrategategategategategate strresslevel = "0" MAX = "10"/</RollOltReovGategategategategategategategat. level = "info"> <appender-ref ref = "console" /> <appender-ref ref = "rollingfileInfo" /> <appender-ref ref = "rollingfileWarn" /> <appent-ref ref = "rollingfileError" /> < /root> </toggers> < /configuration>Kode Pengontrol:
Paket com.hansonwang99.controller; impor org.apache.logging.log4j.logManager; impor org.apache.logging.log4j.llogger; impor org.springframework.web.bind.annotation.getmappapping; impor org.springframework.web.web.web.web.web.web.web.web.web.web.web.web.bind. org.springframework.web.bind.annotation.RestController;@restcontroller@requestMapping ("/testlogging") kelas publik LoggingTestController {private final Logger = LogManager.getLogger (this.getClass ()); @GetMapping ("/hello") Public String Hello () {for (int i = 0; i <10_0000; i ++) {logger.info ("Info Metode Indeks Eksekusi"); Logger.warn ("Warn Metode Indeks Eksekusi"); Logger.Error ("Kesalahan mengeksekusi metode indeks"); } return "Aplikasi Springboot pertama saya"; }}Hasil berjalan
Log akan disimpan dalam file yang berbeda sesuai dengan level yang berbeda. Ketika ukuran file log melebihi 2m, beberapa file akan dikompresi dan disimpan. Disarankan untuk menyesuaikan ukuran file log dari lingkungan produksi dengan 20-50MB.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.