Poziomy logowania i atrybuty
Dodawaj kontekst do logów
Poziomy logowania i atrybuty to bezpłatna lekcja Go Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Go Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Go Academy zawiera 4 lekcji w sumie.
Dodawanie kontekstu do logów
Sam komunikat mówi, co się wydarzyło, natomiast atrybuty opisują szczegóły, dzięki którym logi stają się użyteczne: którego użytkownika dotyczy zdarzenie, którego żądania, ile trwało.
Cztery poziomy
Poziomy slog, od najniższej do najwyższej ważności:
Debug(-4)Info(0)Warn(4)Error(8)
Poziomy są liczbami całkowitymi, więc można definiować własne poziomy pomiędzy nimi.
Filtrowanie według poziomu
Minimalny poziom należy ustawić w HandlerOptions. Rekordy poniżej tego poziomu są szybko odrzucane.
package main
import (
"log/slog"
"os"
)
func main() {
opts := &slog.HandlerOptions{Level: slog.LevelWarn}
logger := slog.New(slog.NewTextHandler(os.Stdout, opts))
logger.Info("ignored")
logger.Warn("shown")
}Atrybuty typowane
Oprócz luźnych argumentów klucz-wartość slog udostępnia typowane konstruktory, które pomagają unikać błędów i działają szybciej:
slog.String("k", v)slog.Int("k", v)slog.Bool("k", v)slog.Duration("k", d)
slog.Info("done", slog.String("phase", "build"), slog.Int("files", 12))Dlaczego warto typować atrybuty
Typowane atrybuty wykrywają błąd „nieparzystej liczby argumentów” podczas kompilacji i pozwalają handlerowi pominąć refleksję. Należy preferować je w często wykonywanych fragmentach kodu.
Grupowanie atrybutów
slog.Group zagnieżdża powiązane pola pod jednym kluczem.
slog.Info("req",
slog.Group("http",
slog.String("method", "GET"),
slog.Int("status", 200),
),
)Logger.With dla współdzielonego kontekstu
logger.With(...) zwraca logger potomny, który dołącza te same atrybuty do każdego komunikatu. Doskonale nadaje się na przykład do identyfikatora żądania.
reqLog := logger.With("requestID", "abc-123")
reqLog.Info("started")
reqLog.Info("finished")Logowanie uwzględniające kontekst
Warianty *Context (na przykład InfoContext) przenoszą obiekt context.Context, dzięki czemu handlery mogą odczytywać identyfikatory śledzenia.
slog.InfoContext(ctx, "handling", "path", "/api")Dynamiczne poziomy
Należy użyć obiektu slog.LevelVar, aby zmieniać poziom w czasie działania (na przykład zwiększyć go do Debug podczas badania incydentu) bez ponownego uruchamiania aplikacji.
var lvl slog.LevelVar
lvl.Set(slog.LevelInfo)
h := slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{Level: &lvl})
// later: lvl.Set(slog.LevelDebug)Błędy jako atrybuty
Błędy należy dołączać jako atrybuty, aby można było je odpytywać, zamiast konkatenować je z komunikatem.
slog.Error("save failed", slog.String("err", err.Error()), slog.Int("retry", 2))Program uruchamialny: poziomy i With
Ten program filtruje dane według poziomu i korzysta z loggera potomnego ze współdzielonym kontekstem.
package main
import (
"log/slog"
"os"
)
func main() {
opts := &slog.HandlerOptions{Level: slog.LevelInfo}
base := slog.New(slog.NewTextHandler(os.Stdout, opts))
req := base.With("requestID", "r-7")
req.Debug("hidden")
req.Info("processing", slog.Int("items", 3))
}Szybkie sprawdzenie
Sprawdź, czy rozumiesz poziomy i atrybuty.
Podsumowanie
Nauczyli się Państwo korzystać z poziomów i atrybutów:
- Cztery wbudowane poziomy można filtrować za pomocą
HandlerOptions.Level - Typowane atrybuty (
slog.String,slog.Int) są bezpieczniejsze i szybsze slog.Groupzagnieżdża pola, alogger.Withwspółdzieli kontekstLevelVarumożliwia zmianę poziomu w czasie działania
Często zadawane pytania
Czy lekcja „Poziomy logowania i atrybuty” jest bezpłatna?
Tak — pełny tekst „Poziomy logowania i atrybuty” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Go Academy, przejdź na CoddyKit PRO. Kurs Go Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Poziomy logowania i atrybuty”?
Dodawaj kontekst do logów Ćwiczysz Go Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Go Academy?
Nie wymagamy żadnego doświadczenia. Go Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Poziomy logowania i atrybuty”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Go Academy?
Tak. Każda lekcja Go Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Dlaczego logi strukturalne
- Handlery slog
- Poziomy logowania i atrybuty
- Własne handlery