Spring Boot ichki darajada keng qamrovli loglash (logging) uchun Commons Logging foydalanadi, lekin asosiy log implementatsiyasini ochiq qoldiradi. Odatiy konfiguratsiyalar Java Util Logging, Log4J2 va Logback uchun mavjud. Har bir holatda log dispetcherlari oldindan konsol chiqishi va faylga yozish imkoniyati bilan sozlangan.
Odatiy bo'lib, agar "Starters" ishlatilsa, Logback loglash uchun ishlatiladi. Javanning Util Logging, Commons Logging, Log4J yoki SLF4J ishlatadigan kutubxonalar uchun ham to'g'ri ishlashi uchun mos marshrutlash Logbackda ta'minlangan.
Logger Formati
Spring Bootdagi odatiy log chiqishi quyidagi misolga o'xshaydi:
2022-10-20 12:40:11.311 INFO 16138 --- [ main] o.s.b.d.f.s.MyApplication : Starting MyApplication using Java 1.8.0_345 on myhost with PID 16138 (/opt/apps/myapp.jar started by myuser in /opt/apps/) 2022-10-20 12:40:11.330 INFO 16138 --- [ main] o.s.b.d.f.s.MyApplication : No active profile set, falling back to 1 default profile: "default" 2022-10-20 12:40:13.056 INFO 16138 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) 2022-10-20 12:40:13.070 INFO 16138 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2022-10-20 12:40:13.070 INFO 16138 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.68] 2022-10-20 12:40:13.178 INFO 16138 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2022-10-20 12:40:13.178 INFO 16138 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1762 ms 2022-10-20 12:40:13.840 INFO 16138 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2022-10-20 12:40:13.850 INFO 16138 --- [ main] o.s.b.d.f.s.MyApplication : Started MyApplication in 4.062 seconds (JVM running for 5.452)
Quyidagi elementlar chiqadi:
-
Sana va vaqt: millisekundlik aniqlik va oson saralash.
-
Log darajasi:
ERROR,WARN,INFO,DEBUGyokiTRACE. -
Process identifikatori.
-
Ajratuvchi
---log xabarlarining boshlanishini ajratish uchun. -
Thread nomi: kvadrat qavslar ichida (konsol uchun qisqartirilgan bo'lishi mumkin).
-
Log dispetcherining nomi: odatda bu original class nomi (ko'pincha qisqartirilgan).
-
Log xabari.
FATAL darajasiga ega emas. U
ERROR darajasida ko'rsatiladi.
Konsol Chiqishi
Logning odatiy konfiguratsiyasida xabarlar yozilganidan so'ng konsolda ko'rsatiladi. Odatiy bo'lib ERROR, WARN va INFO darajasidagi xabarlar loglanadi. Siz "debug" rejimini ham aktivlashtirishingiz mumkin, aplikatsiyani --debug flagi bilan ishga tushirib:
$ java -jar myapp.jar --debug
application.properties faylida
debug=true belgilasangiz bo'ladi.
Agar debug rejimi yoqilgan bo'lsa, asosiy log dispetcherlari (ichki konteyner, Hibernate va Spring Boot) qo'shimcha ma'lumotlarni ko'rsatishga sozlanadi. Debug rejimini yoqish emas aplikatsiyani DEBUG darajasidagi barcha xabarlarni ro'yxatga olishga moslashtirmaydi.
Bundan tashqari, "trace" rejimini yoqishingiz mumkin, aplikatsiyani --trace flagi bilan ishga tushirib (yoki trace=true application.properties faylida). Bu ichki konteyner, Hibernate sxemasi generatsiyasi va Spring portfelining barcha log tracingini ro'yxatga olish imkonini beradi.
Rangli Chiqish
Agar terminal ANSI ni qo'llab-quvvatlasa, o'qishni osonlashtirish uchun rangli chiqish ishlatiladi. Siz spring.output.ansi.enabled ni qo'llab-quvvatlanadigan qiymatga o'rnatishi mumkin, avtomatik aniqlashni o'zgartirish uchun.
Rangli kodlash %clr konversiya so'zi yordamida konfiguratsiya qilinadi. Eng oddiy shaklida konvertor logning darajasiga ko'ra chiqishni bo'yoqlaydi, quyidagi misolda ko'rsatilgandek:
%clr(%5p)
Quyidagi jadvalda log darajalari va ranglar mosligi tasvirlangan:
| Daraja | Rang |
|---|---|
|
|
Qizil |
|
|
Qizil |
|
|
Sariq |
|
|
Yashil |
|
|
Yashil |
|
|
Yashil |
Bundan tashqari, konversiyaga parametr sifatida foydalaniladigan rang yoki uslubni belgilashingiz mumkin. Masalan, matnni sariq qilish uchun quyidagi konfiguratsiyani foydalaning:
%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){yellow}
Quyidagi ranglar va uslublar qo'llab-quvvatlanadi:
-
blue -
cyan -
faint -
green -
magenta -
red -
yellow
Faylga chiqarish
Odatda Spring Boot faqat konsolda log olib boradi va fayllarga yozmaydi. Agar konsolga chiqishdan tashqari log fayllariga yozib borish kerak bo'lsa, logging.file.name yoki logging.file.path ni o'rnatishingiz kerak (masalan, application.properties faylida).
Quyidagi jadvalda logging.* xususiyatlarini qanday ishlatish mumkinligi ko'rsatilgan:
logging.file.name |
logging.file.path |
Misol | Tavsif |
|---|---|---|---|
| (yo'q) |
(yo'q) |
Faqatgina konsolga log yozadi. |
|
| Muayyan fayl |
(yo'q) |
|
Ko'rsatilgan log fayliga yozadi. Nomi aniq joy yoki joriy katalog bilan bog'liq bo'lishi mumkin. |
| (yo'q) |
Muayyan katalog |
|
Ko'rsatilgan katalogga |
Log fayllari hajmi 10 MB ga yetganda aylantiriladi va konsol chiqishida bo'lgani kabi, odatiy bo'lib ERROR, WARN va INFO darajasidagi xabarlar loglanadi.
logback.configurationFile) Spring Boot tomonidan boshqarilmaydi.
Fayl aylantirish
Agar siz Logback ishlatsangiz, fayl aylantirish parametrlarini aniq sozlashingiz mumkin application.properties yoki application.yaml faylidan. Boshqa barcha loglash tizimlari uchun aylantirish parametrlarini o'zingiz sozlashingiz kerak bo'ladi (masalan, agar siz Log4J2 ishlatsangiz, log4j2.xml yoki log4j2-spring.xml faylini qo'shishingiz mumkin).
Quyidagi aylantirish siyosati xususiyatlari qo'llab-quvvatlanadi:
| Nomi | Tavsif |
|---|---|
|
|
Log arxivlarini yaratish uchun fayl nomi shabloni. |
|
|
Aplikatsiya ishga tushganda log arxivini tozalash kerakmi. |
|
|
Faylning arxivdan oldingi maksimal hajmi. |
|
|
Log arxivining o'chirilishidan oldingi maksimal hajmi. |
|
|
Log arxivida saqlanishi kerak bo'lgan maksimal fayllar soni (odatiy 7). |
Loglash darajalari
Barcha qo'llab-quvvatlanadigan loglash tizimlari uchun loglash darajalari Environment dan Spring orqali o'rnatilishi mumkin (masalan, application.properties da) logging.level.<logger-name>=<level> orqali, bu yerda level darajalardan biri: TRACE, DEBUG, INFO, WARN, ERROR, FATAL yoki OFF. Siz root log dispetcherini logging.level.root orqali konfiguratsiya qilishingiz mumkin.
Quyidagi misollar application.properties da mavjud bo'lishi mumkin bo'lgan loglash parametrlarini ko'rsatadi:
logging.level.root=warn
logging.level.org.springframework.web=debug
logging.level.org.hibernate=error
logging:
level:
root: "warn"
org.springframework.web: "debug"
org.hibernate: "error"
Shuningdek, loglash darajalarini muhit o'zgaruvchilari orqali o'rnatishingiz mumkin. Masalan, LOGGING_LEVEL_ORG_SPRINGFRAMEWORK_WEB=DEBUG org.springframework.web uchun DEBUG qiymatini o'rnatadi.
SPRING_APPLICATION_JSON o'zgaruvchisini ishlatishingiz mumkin.
Log Guruhlari
Ko'p hollarda tegishli log dispetcherlarini birgalikda guruhlash imkoniyatiga ega bo'lish foydali, shuncha bir maromda konfiguratsiya qilish mumkin. Masalan, Tomcat bilan bog'liq barcha log dispetcherlarini ko'pincha loglash darajlarini o'zgartirish kerak bo'lishi mumkin, lekin yuqori darajadagi paketlarni eslab qolishni oson bo'lmaydi.
Shu maqsadda Spring Boot sizning Environment da log guruhlarini aniqlash imkonini beradi. Masalan, "tomcat-guruhi" ni application.properties fayliga qo'shib quyidagi tarzda aniqlashingiz mumkin:
logging.group.tomcat=org.apache.catalina,org.apache.coyote,org.apache.tomcat
logging:
group:
tomcat: "org.apache.catalina,org.apache.coyote,org.apache.tomcat"
Qo'shimcha tarzda, siz guruhdagi barcha log dispetcherlarining darajasini bir qator bilan o'zgartirishingiz mumkin:
logging.level.tomcat=trace
logging:
level:
tomcat: "trace"
Spring Boot "qutidan tashqariga" foydalanish imkonini beradigan quyidagi oldindan belgilangan log guruhlarini o'z ichiga oladi:
| Nomi | Log dispetcherlari |
|---|---|
| web |
|
| sql |
|
Logni ishni tugatish interceptori
Loglash resurslarini aplikatsiya ishini tugatishda tozalash uchun, JVM dan chiqishda loglash tizimini tozalaydi. Bu ishni tugatish interceptori avtomatik tarzda ro'yxatga olinadi, agar aplikatsiya war-fayl sifatida joylashtirilmasa. Agar aplikatsiyada murakkab kontekstlar iyerarxiyasi mavjud bo'lsa, ishni tugatish interceptori ehtiyojlaringizga mos kelmasligi mumkin. Agar shunday bo'lsa, interceptorni o'chiring va loglash tizimi tomonidan taqdim etilgan boshqa variantlarni ko'rib chiqing. Masalan, Logback kontekstli selektorlar ni taqdim etadi, bu har bir Logger-ni o'z kontekstida yaratishga imkon beradi. logging.register-shutdown-hook xususiyatini ishlatib ishni tugatish interceptori oʻchirilishi mumkin. false ga o'rnatish ro'yxatdan o'tishni o'chiradi. Bu xususiyatni application.properties yoki application.yaml faylida o'rnatishingiz mumkin:
logging.register-shutdown-hook=false
logging:
register-shutdown-hook: false
Custom Loglash Konfiguratsiyasi
Loglash tizimlarini classpathda tegishli kutubxonalarni qo'shish orqali ishlashi mumkin va qo'shimcha maxsus konfiguratsiyani classpathning ildiziga yoki Spring uchun Environment dagi quyidagi xususiyat bilan belgilangan joyga topshirish orqali amalga oshirishingiz mumkin: logging.config.
Spring Bootni ma'lum bir loglash tizimini qattiq ishlatishga majbur qilish mumkin org.springframework.boot.logging.LoggingSystem tizim xususiyati orqali. Qiymat LoggingSystem implementatsiyasining to'liq class nomi bo'lishi kerak. Shuningdek, loglash konfiguratsiyasini to'liq o'chirish mumkin, none qiymatini ishlatib.
ApplicationContext yaratishdan oldin ishga tushirilgani uchun, loglashni
@PropertySources annotatsiyasidan foydalanib boshqara olmaysiz. Tizim xususiyatlari orqali loglash tizimini oʻzgartirish yoki uni toʻliq oʻchirishning yagona usuli mavjud.
Loglash tizimiga bog'liq holda quyidagi fayllar yuklanadi:
| Loglash sistemi | Sozlash |
|---|---|
| Logback |
|
| Log4j2 |
|
| JDK (Java Util Logging) |
|
-spring variantlarini ishlatishni tavsiya qilamiz (masalan,
logback-spring.xml,
logback.xml o'rniga). Standart konfiguratsiya joylari ishlatilsa, Spring logni to'liq boshqarishni qila olmaydi.
Simplificationni osonlashtirish uchun Spring Environment dan ba'zi boshqa xususiyatlarni tizim xususiyatlariga o'tkazadi, quyidagi jadvalda keltirilgan:
| Spring atrof-muhiti | Tizim xususiyati | Izohlar |
|---|---|---|
|
|
|
Istisnolarni ro'yxatdan o'tkazishda ishlatiladigan konversiya so'zi. |
|
|
|
Agar belgilangan bo'lsa, odatiy log konfiguratsiyasida ishlatiladi. |
|
|
|
Agar belgilangan bo'lsa, odatiy log konfiguratsiyasida ishlatiladi. |
|
|
|
Konsol uchun ishlatiladigan log shabloni (STDOUT). |
|
|
|
Log sanasini formatlash uchun appender shabloni. |
|
|
|
Konsolga chiqariladigan log uchun ishlatiladigan kodlash. |
|
|
|
Fayl uchun ishlatiladigan log shabloni (agar |
|
|
|
Fayllarda log olib borish uchun ishlatiladigan kodlash (agar |
|
|
|
Log darajasini o'qishda ishlatiladigan format (odatiy |
|
|
|
Joriy jarayon identifikatori (agar bu mumkin bo'lsa va hali OS muhit variabili sifatida belgilanmagan bo'lsa). |
Agar siz Logback foydalansangiz, shuningdek quyidagi xususiyatlar o'tkaziladi:
| Spring atrof-muhiti | Tizim xususiyati | Izohlar |
|---|---|---|
|
|
|
Log arxivlarining fayl nomi uchun shablon (odatiy |
|
|
|
Log arxividagi fayllarni aplikatsiya ishga tushganda tozalash kerakmi. |
|
|
|
Log faylining maksimal hajmi. |
|
|
|
Log arxivlarining umumiy saqlash sig'imi. |
|
|
|
Log arxivida saqlanishi kerak bo'lgan maksimal fayllar soni. |
Barcha qo'llab-quvvatlanadigan loglash tizimlari o'z konfiguratsion fayllarini tahlil qilishda tizim xususiyatlariga murojaat qilishi mumkin. Namunaviy konfiguratsiyalarni spring-boot.jar da ko'rishingiz mumkin:
Agar siz loglash xususiyatida joy egasiga ehtiyoj bo'lsa, Spring Boot sintaksisini qo'llab-quvvatlangan frameworkning sintaksisidan foydalanishingiz kerak. Ayniqsa, agar siz Logback foydalansangiz, xususiyatning nomi va uning odatiy qiymati orasidagi ajratuvchi sifatida : dan, :- dan emas foydalanishingiz kerak.
MDC konteksini va boshqa maxsus tarkibni log satrlari ichiga qo'shish mumkin, faqat LOG_LEVEL_PATTERN (yoki Logbackda logging.pattern.level)ni o'zgartirish orqali. Misol uchun, agar siz logging.pattern.level=user:%X{user} %5p foydalansangiz, loglashning odatiy formatida "user" uchun MDC yozuvi mavjud bo'lsa, quyidagi misolda ko'rsatilgandek, mavjud bo'ladi.
2019-08-30 12:30:04.031 user:someone INFO 22174 --- [ nio-8080-exec-0] demo.Controller Handling authenticated request
Logback kengaytmalari
Spring Boot Logback uchun bir qator kengaytmalar beradi, ular konfiguratsiyani chuqurroq qilishni osonlashtiradi. logback-spring.xml konfiguratsion faylida bu kengaytmalarni ishlatishingiz mumkin.
logback.xml konfiguratsion fayli juda erta yuklanadi, shuning uchun undan kengaytmalar ishlatib bo'lmaydi.
logback-spring.xml dan foydalanishingiz yoki
logging.config xususiyatini belgilashingiz kerak.
ERROR in ch.qos.logback.core.joran.spi.Interpreter@4:71 - no applicable action for [springProperty], current ElementPath is [[configuration][springProperty]] ERROR in ch.qos.logback.core.joran.spi.Interpreter@4:71 - no applicable action for [springProfile], current ElementPath is [[configuration][springProfile]]
Aniq profilga oid konfiguratsiya
<springProfile> tegidan foydalanish orqali konfiguratsiya qismlarini faqat Springning faol profillariga asoslangan bog'lanish yoki chiqarish imkonini beradi. Profil bo'limlarini <configuration> elementining istalgan joyida qo'llab-quvvatlanadi. Konfiguratsiyani qabul qiladigan profilni belgilash uchun name atributidan foydalaning. <springProfile> tegi profilning nomini (masalan, staging) yoki profil ifodasini o'z ichiga olishi mumkin. Profil ifodasi yanada murakkab profil mantiqini ifodalash imkonini beradi (masalan, production & (eu-central | eu-west)). Quyidagi listda uchta profil namunasi ko'rsatilgan:
<springProfile name="staging">
<!-- "staging" profili faol bo'lsa, faollashtiriladigan konfiguratsiya -->
</springProfile>
<springProfile name="dev | staging">
<!-- "dev" yoki "staging" profili faol bo'lsa, faollashtiriladigan konfiguratsiya -->
</springProfile>
<springProfile name="!production">
<!-- "production" profili faol bo'lsa, faollashtiriladigan konfiguratsiya -->
</springProfile>
Atrof-muhit xususiyatlari
<springProperty> tegi Springdan Environment dan Logback uchun xususiyatlarni ochish imkonini beradi. Bu Logback konfiguratsiyasida application.properties faylidan qiymatlar olish kerak bo'lsa foydali bo'lishi mumkin. Ushbu teg Logbackdagi standart <property> tegiga o'xshaydi. Biroq, to'g'ridan-to'g'ri value berish o'rniga siz xususiyatning source ni (Spring Environment dan) belgilaysiz. Agar xususiyatni local ko'rinish sohasida saqlash kerak bo'lsa, scope atributini ishlatishingiz mumkin. Agar muqobil qiymat kerak bo'lsa (xususiyat Environment da o'rnatilmagan bo'lsa), defaultValue atributidan foydalanishingiz mumkin. Quyidagi misolda Logbackda foydalanish uchun xususiyatlarni ochishni ko'rsatgan:
<springProperty scope="context" name="fluentHost" source="myapp.fluentd.host"
defaultValue="localhost"/>
<appender name="FLUENT" class="ch.qos.logback.more.appenders.DataFluentAppender">
<remoteHost>${fluentHost}</remoteHost>
...
</appender>
source ni kebab-case formatida berishingiz kerak (masalan,
my.property-name). Biroq, xususiyatlar yumshoq qoidalarga rioya qilgan holda
Environment ga qo'shilishi mumkin.
GO TO FULL VERSION