Logging vs. the Debugger
Jurnal yozish yoki debugger
Ikki xil sayohatchini tasavvur qiling. Birinchisi — YO'L KUNDALIGI yuritadi: har bir shahar, har bir kun nima bo'lganini yozib boradi, sayohat tugagach kundalikni o'qib, qayerda nima sodir bo'lganini tiklaydi. Ikkinchisi — VAQTNI TO'XTATISH kuchiga ega: istalgan lahzada dunyoni muzlatib, atrofni sinchiklab ko'zdan kechiradi, so'ngra davom ettiradi. Ikkalasi ham foydali, lekin turli vaziyatlar uchun mos.
Dasturda bu ikki usul — jurnal yozish (logging) va debugger (breakpoint qo'yib, dasturni to'xtatib tekshirish vositasi). Logging with slog kursida siz slog bilan jurnal yozishni o'rgangansiz — bu "yo'l kundaligi" usuli: kodga slog.Info yoki fmt.Println qo'shib, dastur ishlaganda nima bo'lganini yozib borasiz, keyin jurnalni o'qib tahlil qilasiz.
| Vaziyat | Mos vosita |
|---|---|
| Xato faqat production'da, kamdan-kam sodir bo'ladi | Logging — dasturni to'xtatib bo'lmaydi, lekin doimiy jurnal qoldirish mumkin |
| Xato concurrency (bir nechta goroutine) bilan bog'liq | Logging — debugger goroutine'larni to'xtatib, vaqt sinxronizatsiyasini o'zgartirib yuborishi mumkin |
| Xato lokal muhitda, istalgan vaqt qayta hosil qilinadi | Debugger — bitta joyda to'xtab, barcha o'zgaruvchilarni bir vaqtning o'zida ko'rish qulay |
| Aniq bitta funksiya ichida qadam-baqadam nima bo'layotganini bilish kerak | Debugger — qatordan qatorga o'tib, har bir qiymatni tekshirish mumkin |
Logging'ning afzalligi — u dasturning TABIIY ishlash tezligini deyarli o'zgartirmaydi va istalgan muhitda (hatto production serverida) ishlaydi, shuning uchun "ba'zan, kamdan-kam" sodir bo'ladigan xatolarni ushlashda debugger'dan ko'ra ishonchliroq. Debugger'ning afzalligi — bitta to'xtash nuqtasida barcha o'zgaruvchilarni birdaniga, chuqur ko'rish imkonini beradi, bu esa lokal, tez-tez qayta hosil qilinadigan xatolarda tezroq.
Ikkalasini birga ishlatish ham keng tarqalgan strategiya: avval logging bilan xatoni "qaysi funksiya atrofida" ekanini toraytirib (Binary Search for Bugs darsidagi kabi), so'ngra o'sha aniq joyga debugger bilan "kirib", batafsil tekshirish. Vosita tanlovi — vaziyatga qarab, ikkalasini ham bilib, kerak paytida to'g'risini tanlash muhandislik ko'nikmasi.
Muhim ogohlantirish: debug jurnallarini (fmt.Println("BU YERGACHA YETDIM")) muammo hal bo'lgandan keyin kodda QOLDIRIB ketmang — bular keyinchalik boshqa dasturchini chalg'itadi. Vaqtinchalik logging'ni tuzatishdan keyin o'chiring, yoki uni doimiy, foydali slog yozuviga aylantiring.
Key Takeaway
Key Takeaway:
Logging — kamdan-kam, production'da yoki concurrency bilan bog'liq xatolar uchun ishonchliroq; debugger — lokal, tez qayta hosil qilinadigan xatolarda tezroq va chuqurroq. Ikkalasini vaziyatga qarab tanlang, va vaqtinchalik debug jurnallarini muammo hal bo'lgach o'chiring.
NEXT UP
The Rubber Duck Technique