CodeBlanks Logo Icon CodeBlanks

log/slog

  • Go kursu
  • İleri seviye
  • Ders 59/68
  • 4 dk

log/slog ile yapılandırılmış loglamayı öğrenirsin.

log/slog

Go 1.21 ile gelen log/slog, yapılandırılmış (anahtar-değer) log yazar. Metin yerine alanlar kaydedildiği için loglar aranabilir ve süzülebilir:

logger := slog.New(slog.NewJSONHandler(os.Stdout, nil))
logger.Info("sipariş alındı", "id", 42, "tutar", 99.5)
// {"time":"...","level":"INFO","msg":"sipariş alındı","id":42,"tutar":99.5}

Seviyeler: Debug, Info, Warn, Error.

Ortak alanlar: With

With tüm kayıtlara eklenecek alanlarla yeni bir logger oluşturur; istek kimliği gibi bağlamı her satıra taşır:

reqLog := logger.With("istek_id", "a1b2", "yol", "/sepet")
reqLog.Info("başladı")
reqLog.Error("ödeme başarısız", "hata", err)

Metin çıktısı için slog.NewTextHandler kullanılır: level=INFO msg=başladı istek_id=a1b2.

Uygulama Metin logu

slog.NewTextHandler ile os.Stdout'a yazan bir logger oluştur; zaman alanını kaldırmak için ReplaceAttr ile slog.TimeKey anahtarını at. logger.Info("hazır", "port", 8080) yaz.

Başlangıç kodu

main.go
package main

import (
    "log/slog"
    "os"
)

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
package main

import (
    "log/slog"
    "os"
)

func main() {
    opts := &slog.HandlerOptions{
        ReplaceAttr: func(groups []string, a slog.Attr) slog.Attr {
            if a.Key == slog.TimeKey {
                return slog.Attr{}
            }
            return a
        },
    }
    logger := slog.New(slog.NewTextHandler(os.Stdout, opts))
    logger.Info("hazır", "port", 8080)
}

Beklenen çıktı

level=INFO msg=hazır port=8080

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Varsayılan ayarla <code>logger.Debug(...)</code> neden görünmez?

  • Hata verir
  • Varsayılan seviye Info'dur; Debug altında kalır Doğru cevap
  • Debug kaldırılmıştır
  • JSON handler Debug desteklemez

Açıklama: HandlerOptions{Level: slog.LevelDebug} verilmedikçe Info altındaki kayıtlar yazılmaz.

2 Ortak alan ekle

Soru
reqLog := logger.____("istek_id", id)
Cevap
reqLog := logger.With("istek_id", id)

Açıklama: With, verilen alanları sonraki tüm kayıtlara ekleyen yeni bir logger döndürür.

3 slog parçaları

Kavram Anlamı
slog.NewJSONHandler JSON çıktı
slog.NewTextHandler anahtar=değer çıktı
logger.With Ortak alanlar
slog.LevelDebug En ayrıntılı seviye

İleri seviye bölümündeki tüm dersler