Production Logging Patterns
Production loglash naqshlari
Haqiqiy loyihada loglash bilan bog'liq bir nechta amaliy qoidalar bor — ularni bilish log tizimini foydali (yoki, aksincha, foydasiz va hatto xavfli) qilishi mumkin.
1. Hech qachon maxfiy ma'lumotni loglamang
Parol, karta raqami, token — bularni hech qachon log'ga yozmang, hatto "Debug" darajasida ham. Loglar ko'pincha uzoq vaqt saqlanadi va ko'p odam ularni ko'ra oladi — bu maxfiy ma'lumot chiqib ketishining keng tarqalgan sababi.
2. slog.Default() bilan global logger
slog.SetDefault(slog.New(slog.NewJSONHandler(os.Stdout, nil)))
// Endi kodning istalgan joyida:
slog.Info("foydalanuvchi ro'yxatdan o'tdi", "user_id", 42)slog.SetDefault bilan dastur boshida bitta logger sozlab, keyin uni hamma joyda slog.Info(...) (paket darajasidagi funksiya, logger o'zgaruvchisiz) orqali ishlatish mumkin — har bir faylga logger'ni argument qilib uzatib yurish shart emas.
3. Context bilan bog'lash
Katta tizimlarda bitta so'rovga tegishli barcha loglarni birlashtirish uchun "so'rov ID"sini (request ID) har bir log yozuviga qo'shish odat: logger.Info("...", "request_id", reqID). Shunda bitta foydalanuvchi so'rovi bo'yicha barcha loglarni bitta ID bo'yicha qidirib, to'liq "hikoya"ni ko'rish mumkin bo'ladi.
4. Xato bilan birga kontekst bering
logger.Error("xato", "err", err) — faqat "xato" deyish emas, xatoning o'zini (err) ham qo'shing, shuningdek shu vaziyatga tegishli boshqa ma'lumotni ham (masalan qaysi foydalanuvchi, qaysi so'rov). Kelajakda shu xatoni tergov qilayotган odam (ehtimol siz o'zingiz, olti oydan keyin) minnatdor bo'ladi.
Key Takeaway
Key Takeaway:
Yaxshi production loglash: maxfiy ma'lumotni yashiradi, global logger orqali qulaylik yaratadi, so'rovlarni ID orqali bog'laydi va xatolarga yetarli kontekst qo'shadi.
NEXT UP
Capstone: Payment Gateway Logging