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
package main
import (
"log/slog"
"os"
)
func main() {
// buraya yaz
}Örnek çözüm
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
reqLog := logger.____("istek_id", id)
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 |