4.1 Loglash darajalari ro'yxati
O'zingiz dasturingizni yozdingiz, serverga yukladingiz va darhol savollar paydo bo'la boshladi:
debug()
metodiproduction
da ishlayotganida ishlamaydigan qilib qanday qilish mumkin?- Loglarda juda ko'p ma'lumot bor, faqat xato xabarlarini qoldirishni xohlaysizmi?
- Dastur bir qismining batafsil logini qanday ko'rish mumkin?
Albatta, loglarni yaratuvchilar bunga o'nlab yillar oldin duch kelishgan. C tilida bu muammoni qanday hal qilishganini aytmayman, lekin Java tilida bu juda chiroyli tarzda hal qilingan.
Log yozuvga ma'lumot yozishdan oldin filtrlash qiladi. Loglash darajasini sozlash orqali logning aniqligini juda tez kamaytirish/ko'paytirish mumkin. Ushbu darajalar quyidagi jadvalda tasvirlangan:
Daraja | Izoh | |
---|---|---|
1 | ALL | Barcha xabarlarni logga yozish |
2 | TRACE | Saralash paytida mayda xabar |
3 | DEBUG | Saralash muhim xabarlari |
4 | INFO | Oddiy xabarlar |
5 | WARN | Faqat fatal, error va warning yozish |
6 | ERROR | Faqat xatolar va fatal xatolarni yozish |
7 | FATAL | Faqat fatal xatolarni yozish |
8 | OFF | Xabarlarni logga yozmaslik |
Bu darajalar xabarlarni filtrlashda ishlatiladi. Agar loglash darajasi WARN
ga o'rnatilsa, WARN
dan kamroq muhim bo'lgan barcha xabarlar qoldiriladi: TRACE
, DEBUG
, INFO
. Agar filtrlash darajasi FATAL
ga o'rnatilsa, ERROR
lar ham qoldiriladi.
Filtrlashda ishlatiladigan yana ikki daraja mavjud – bu OFF
(barcha xabarlarni qoldirish) va ALL
– barcha xabarlarni yozish (hech narsani qoldirmaslik).
4.2 Logni sozlash misoli
Keling, logni sozlashning oddiy misolini ko'rib chiqamiz. Buning uchun bizga resources papkasida joylashtirilishi mumkin bo'lgan log4j.properties fayli kerak bo'ladi. Unga quyidagi mazmunni qo'shamiz:
# Root logger option
log4j.rootLogger=WARN, stdout
# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}
Mana shu eng birinchi qatorida biz loglash darajasini belgilayapmiz – WARN
. Bu esa degani, loggaga DEBUG
va INFO
statusli xabarlar yozilmaydi.
- Qaysi turdagi appender ishlatishni ko'rsatamiz –
ConsoleAppender
- Logni qayerga yozishni ko'rsatamiz –
System.out
- Yozuv formatini boshqaradigan klassni belgilaymiz –
PatternLayout
- Barcha xabarlar uchun yozuv formatini belgilaymiz – sana va vaqt
4.3 Loglashdagi mashhur xatolar
Yana bir muhim jihat – loglashdagi mashhur xatolar. Ko'p narsa noto'g'ri qilinishi mumkin, lekin bir nechta keng tarqalgan xatolarni ajratib ko'rsatish mumkin:
- Log ko'pligi. Har bir qadamni loglash kerak emas, qaysi nazariy jihatdan muhim bo'lishi mumkin. Bir qoida bor: loglar ishlash qobiliyatini 10% dan ortiq yuklamasligi kerak. Aks holda, samaradorlik bilan bog'liq muammolar paydo bo'lishi mumkin.
- Barcha ma'lumotlarni bir faylga loglash. Bu oxir-oqibat o'qish/yozishni juda murakkab qiladi, ba'zi tizimlarda fayl hajmi cheklovlari mavjud ekanligini aytmasa ham bo'ladi.
- Loglash darajalarini noto'g'ri qo'llash. Har bir loglash darajasining aniq chegaralari bor va ularga rioya qilish kerak. Agar chegara noaniq bo'lsa, qaysi darajani ishlatishga kelishib olish mumkin.
GO TO FULL VERSION