0Pricing
Go Academy · Lekcja

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.Group zagnieżdża pola, a logger.With współdzieli kontekst
  • LevelVar umoż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

  1. Dlaczego logi strukturalne
  2. Handlery slog
  3. Poziomy logowania i atrybuty
  4. Własne handlery
← Powrót do Go Academy