GoDasturchi
Production Logging Patterns

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

example.go
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

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

example.go
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