JavaRush /Kurslar /All lectures for UZ purposes /Nega Java'da loglar kerak

Nega Java'da loglar kerak

All lectures for UZ purposes
Daraja, Dars
Mavjud

1.1 Loglar bilan tanishlik

Log – bu ro'y bergan hodisalar ro'yxati. Deyarli dengiz jurnali yoki kundalikday. Shunaqa, logger — bu loglarni yuritish uchun foydalaniladigan obyekt. Dasturlashda deyarli hamma narsani loglash qabul qilingan. Java'da esa umuman hammasi va hatto biroz ko'proq.

logger java

Gap shundaki, Java dasturlari ko'pincha katta server dasturlari bo'lib, ular UI, konsol va hokazolardan foydalanmaydi. Ular bir vaqtning o'zida minglab foydalanuvchilar so'rovlarini qayta ishlaydi va bunda ba'zan turli xatolar yuzaga keladi. Ayniqsa, har xil iplar bir-birlariga halaqit bera boshlaganda.

Va, aslida, bunday vaziyatda kamdan-kam takrorlanadigan xatolarni va buzilishlarni topishning yagona usuli har bir ipda sodir bo'layotgan barcha narsalarni log/faylga yozishdir.

Ko'pincha logda metod chaqirilgan parametrlari, barcha ushlanilgan xatolar va ko'p oraliq ma'lumotlar yoziladi. Qanchalik to'liq log bo'lsa, hodisalar ketma-ketligini tiklash va nosozlik yoki xatolik yuzaga kelish sabablarini kuzatish osonroq bo'ladi.

Lekin log qanchalik katta bo'lsa, u bilan ishlash shunchalik qiyin. Ba'zan loglar kuniga bir necha gigabaytga yetadi. Bu normal holat.

1.2 Noqulay loglar

Dastlabki loglar sifatida dasturchilar oddiy konsolga chiqarish dan foydalanganlar. Bu dastur debagi paytida qulay – barcha muhim axborot va o'zgaruvchilar qiymatlari konsolga yoziladi. Lekin bunday log oddiy dastur ishlash vaqtida umuman qo'llanilmaydi.

Birinchidan, dastur o'zi konsolga nimadir chiqarishni xohlashi mumkin va foydalanuvchi dasturchiga mo'ljallangan xizmat axborotini ko'rishni xohlamaydi.

Ikkinchidan, konsol buferining hajmi cheklangan, u yerga ko'p narsa yozib bo’lmaydi.

Va nihoyat, uchinchidan, uzoq vaqt davomida to'plangan dastur xatolari haqidagi ma'lumotni dasturchilarga yuborish kerak. Va bu ma'lumotlarning barchasini darhol faylga yozish qulayroq.

Dasturchilar birinchi muammoni tezda hal qilishdi – yana bir chiqish oqimini o'ylab topishdi – System.err. Siz unga xabarlarni yozishingiz mumkin va ular standart konsolga emas, balki alohida oqimga yuboriladi.

Va hatto faylga yozish muammosini ham hal qilishga muvaffaq bo'lishdi:


// Log yoziladigan faylni belgilaymiz
System.setErr(new PrintStream(new File("log.txt")));
// Xabarlarni chiqaryapmiz
System.err.println("Xabar 1");
System.err.println("Xabar 2");
// Xato haqida xabarni chiqaramiz
try {
    throw new Exception("Xato haqida xabar");
} catch (Exception e) {
    e.printStackTrace();
}

Lekin hatto bunday shaklda ham, bu muammoning hammasini hal qilmadi, shuning uchun log xabarlarini faylga yozuvchi maxsus kutubxona yaratishga qaror qilindi. Bu aqlli tarzda qildi va loglanadigan hodisalar va ma'lumotlar filьtrlarini moslashuvchan tarzda sozlash imkonini berdi.

Loglash jarayoni, asosan, uch qismdan iborat:

  • Birinchi qism – bu ma'lumotlarni to'plash.
  • Ikkinchi qism – bu to'plangan ma'lumotlarni filьtrlash.
  • Uchinchi qism – bu tanlangan ma'lumotlarni yozish.

1.3 log4j logger bilan tanishlik

Java jamoasida birinchi mashhur logger log4j logger bo'ldi. Uni loyihaga qo'shish juda oson, buning uchun pom.xml faylingizga faqat bir necha qator qo'shishingiz kerak


<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>2.2.17</version>
</dependency>

Sening dasturing bilan bunday logger ishlashi quyidagicha ko'rinishi mumkin edi:


class Manager {
 private static final Logger logger = LoggerFactory.getLogger(Manager.class);

   public boolean processTask(Task task) {
  logger.debug("processTask id = " + task.getId());
        try {
            task.start();
            task.progress();
            task.complete();
            return true;
        } catch (Exception e) {
  logger.error("Noma'lum xato", e);
            return false;
        }
    }
}

Bu yerda uchta narsa sodir bo'ladi:

Yashil rangda obyekti yaratish bo'yicha belgilangan Logger. Uning obyekti keyingi qulay ishlash uchun statik o'zgaruvchida saqlanadi. Shuningdek, getLogger() metodiga ma'lumot to'plab bo'layotgan sinf haqida ma'lumot beriladi.

Ko'k rangda biz debaq vaqtida faqatgina qadrli bo'lgan ma'lumotni log qilayotgan qator belgilangan. Buning uchun maxsus metod - debug() ishlatiladi

Nihoyat, qizil rangda logga yuzaga kelgan istisno saqlanadigan qator belgilangan. Istisnolar potensial xatolar, shuning uchun logga yozish uchun error() metod ishlatiladi.

Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION