Apenderlar ro‘yxati
Logger ma'lumotlarni bir nechta fayllarga saqlash imkonini beradi. Bunday chiqish oqimlari apenderlar deb ataladi (append so‘zidan). Juda ko‘p standart apenderlar mavjud, shuning uchun biz faqat eng mashhurlarini ko‘rib chiqamiz:
| Apenderlar | Tavsif | |
|---|---|---|
| 1 | Console | Ma'lumotlarni konsolga chiqaradi |
| 2 | File | Ma'lumotlarni faylga chiqaradi |
| 3 | DailyRollingFile | Ma'lumotlarni faylga chiqaradi, fayl doimiy ravishda qayta yoziladi |
| 4 | Async | Boshqa apenderga ma'lumotlarni asinxron yozish imkonini beradi |
| 5 | Socket | Ma'lumotlarni belgilangan soketga yozadi |
| 6 | JDBC | Xabarlarni JDBC protokoli orqali bazaga yozadi |
| 7 | JPA | Xabarlarni JPA protokoli orqali bazaga yozadi |
| 8 | HTTP | Voqealarni HTTP-protokoli orqali masofaviy serverga jo‘natadi |
| 9 | SMTP | Xabarlarni buferga yig‘adi, keyin email orqali jo‘natadi |
Barcha apenderlar haqida yaxshi hujjatlar ularning rasmiy saytida mavjud
Quyida esa biz eng mashhur va osonlarini ko‘rib chiqamiz
ConsoleAppender
Eng oddiy apender – bu ConsoleApender. Siz allaqachon sezganingizdek, u xabarlarni oddiygina konsolga yozadi. Unda biz uchun qiziqarli bir nechta parametrlar mavjud:
| Attribyutlar | ||
|---|---|---|
| 1 | name | Apenderning nomi |
| 2 | filter | Xabarlarning bir qismini filtrlash imkonini beradi |
| 3 | layout | Chiqishdagi xabarlarni formatlashni belgilaydi |
| 4 | target | Qayerga yozish kerakligini belgilaydi: SYSTEM_OUT yoki SYSTEM_ERR |
Uni sozlash juda oson:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="%m%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="STDOUT"/>
</Root>
</Loggers>
</Configuration>
FileAppender
Eng foydali apender – bu FileAppender. ConsoleAppender farqli ravishda, bu xabarlarni faylga yozadi. Bu juda foydali, agar ilovangiz biror serverda ishlayotgan bo‘lsa. Unda turli operatsion tizimlarda fayllarni yozish kerak bo‘lgani uchun ko‘p parametrlar mavjud.
Ammo biz faqat eng mashhurlari bilan tanishamiz
| 1 | name | Apenderning nomini belgilaydi |
| 2 | filter | Xabarlarning bir qismini filtrlash imkonini beradi |
| 3 | layout | Chiqishdagi xabarlarni formatlashni belgilaydi |
| 4 | fileName | Xabarlarni qaysi faylga yozish kerakligini belgilaydi |
| 5 | append | Agar true bo‘lsa, xabarlar eski logga yoziladi, agar false bo‘lsa – log-fayl har safar ilova ishga tushirilganda qayta yaratiladi. |
| 6 | bufferSize | Bufer hajmini baytlarda belgilaydi |
| 7 | immediateFlush | Agar true bo‘lsa, har bir xabar diskka darhol yoziladi (bufersiz). Log sekin ishlay boshlaydi, lekin bu dasturning qulashida ma'lumotlarni yo‘qotishdan saqlaydi. |
Siz allaqachon fayllar bilan yaxshi ishlashni bilasiz, shuning uchun bu sozlamalarda siz uchun hech qanday yangilik yo‘q. Bunday loggerni sozlash ham konsoldan osonroq:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
<Appenders>
<File name="MyFile" fileName="logs/app.log">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
</File>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="MyFile"/>
</Root>
</Loggers>
</Configuration>
RollingFileAppender
Eng mashhur apender – bu RollingFileAppender. FileAppender farqli ravishda, bu logni ko‘p kichik fayllarga bo‘lish imkonini beradi. Bu katta loglar uchun juda dolzarb. Shuningdek, u yangi fayllar yozilayotganda eski fayllar bilan nima qilish mumkinligini belgilash imkonini beradi.
Bu apender deyarli yuzga yaqin turli sozlamalarga ega. Ular haqida batafsil havola orqali tanishishingiz mumkin
Ushbu apenderning eng mashhur atributlarini ko‘rib chiqamiz:
| Attribyutlar | ||
|---|---|---|
| 1 | name | Apenderning nomini belgilaydi |
| 2 | filter | Xabarlarning bir qismini filtrlash imkonini beradi |
| 3 | layout | Chiqishdagi xabarlarni formatlashni belgilaydi |
| 4 | fileName | Xabarlarni qaysi faylga yozish kerakligini belgilaydi |
| 5 | filePattern | Yozilmaydigan arxiv fayllar uchun nomlar shablonini belgilaydi |
| 6 | policy | Fayl qachon qayta yozilishi kerakligini belgilaydi |
| 7 | strategy | Eski fayllar bilan nima qilish kerakligini belgilaydi: arxivlash, qancha kun tarixni saqlash va hokazo |
Yaxshi misol:
<Configuration status="warn" name="MyApp" packages="">
<Appenders>
<RollingFile name="RollingFile" fileName="logs/app.log" filePattern="logs/app-%d{MM-dd-yyyy}-%i.log.gz">
<PatternLayout> <Pattern>%d %p %c{1.} [%t] %m%n</Pattern> </PatternLayout>
<Policies> <TimeBasedTriggeringPolicy /> <SizeBasedTriggeringPolicy size="250 MB"/> </Policies>
</RollingFile>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="RollingFile"/>
</Root>
</Loggers>
</Configuration>
filePattern parametri yordamida eski loglar arxivlari uchun shablon belgilangan. Shuningdek, bu yerda yangi fayl yozilishi boshlanishiga sabab bo‘luvchi ikkita shart mavjud:
-
TimeBasedTriggeringPolicy– yangi kunlar boshlanishida (joriy sana o'zgarganda) ishlaydi SizeBasedTriggeringPolicy– fayl hajmi 250MB ga yetganda ishlaydi
GO TO FULL VERSION