0Pricing
Go Academy · Lekcja

Handlery slog

Handlery tekstowe i JSON

Handlery slog to bezpłatna lekcja Go Academy na CoddyKit. To lekcja 2 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.

Handlery decydują o formacie

W slog obiekt Logger wywołuje obiekt Handler, aby sformatować i zapisać każdy rekord. Zamiana handlera zmienia format danych wyjściowych bez modyfikowania wywołań logowania.

TextHandler

slog.NewTextHandler zapisuje przyjazne dla człowieka wiersze w formacie key=value. Dobrze sprawdza się podczas lokalnego programowania i pracy w terminalu.

package main

import (
    "log/slog"
    "os"
)

func main() {
    h := slog.NewTextHandler(os.Stdout, nil)
    logger := slog.New(h)
    logger.Info("hello", "env", "dev")
}

JSONHandler

slog.NewJSONHandler generuje po jednym obiekcie JSON w każdym wierszu. Jest idealny dla produkcyjnych potoków logów.

package main

import (
    "log/slog"
    "os"
)

func main() {
    h := slog.NewJSONHandler(os.Stdout, nil)
    logger := slog.New(h)
    logger.Info("hello", "env", "prod")
}

Tworzenie loggera

slog.New(handler) opakowuje handler w obiekt Logger. Na tej instancji wywołują Państwo logger.Info, logger.Error itd.

logger := slog.New(slog.NewJSONHandler(os.Stdout, nil))

HandlerOptions

Drugim argumentem konstruktora handlera jest *slog.HandlerOptions. Należy przekazać nil, aby użyć wartości domyślnych, albo skonfigurować poziom i lokalizację źródła.

opts := &slog.HandlerOptions{
    Level:     slog.LevelDebug,
    AddSource: true,
}
h := slog.NewJSONHandler(os.Stdout, opts)

Zapisywanie do pliku lub bufora

Handlery przyjmują dowolny obiekt io.Writer. Można logować do pliku, bufora używanego w testach albo standardowego wyjścia. To rozdzielenie odpowiedzialności jest jedną z kluczowych cech projektu slog.

f, _ := os.Create("app.log")
logger := slog.New(slog.NewJSONHandler(f, nil))

Ustawianie domyślnego loggera

slog.SetDefault(logger) sprawia, że funkcje pakietowe (slog.Info itd.) korzystają z Państwa handlera. Należy ustawić go raz podczas uruchamiania aplikacji.

slog.SetDefault(slog.New(slog.NewJSONHandler(os.Stdout, nil)))
slog.Info("now JSON by default")

Dane wyjściowe tekstowe a JSON

To samo wywołanie, dwa formaty:

  • Tekst: time=... level=INFO msg=hello env=dev
  • JSON: {"time":"...","level":"INFO","msg":"hello","env":"dev"}

Wybór handlera

Praktyczna zasada:

  • Lokalnie i w środowisku deweloperskim: TextHandler (czytelność)
  • W środowisku produkcyjnym i przy agregowaniu logów: JSONHandler (łatwe przetwarzanie)

Należy wybierać handler za pomocą zmiennej środowiskowej, aby ten sam plik wykonywalny mógł dostosować się do środowiska.

Tworzenie konfiguracji wielokrotnego użytku

Należy scentralizować tworzenie loggera, aby cała aplikacja korzystała z jednej konfiguracji.

func newLogger(prod bool) *slog.Logger {
    if prod {
        return slog.New(slog.NewJSONHandler(os.Stdout, nil))
    }
    return slog.New(slog.NewTextHandler(os.Stdout, nil))
}

Program uruchamialny: przełączanie handlerów

Ten program zapisuje to samo zdarzenie za pomocą obu handlerów, aby można było porównać formaty.

package main

import (
    "log/slog"
    "os"
)

func main() {
    text := slog.New(slog.NewTextHandler(os.Stdout, nil))
    js := slog.New(slog.NewJSONHandler(os.Stdout, nil))
    text.Info("login", "user", "ada")
    js.Info("login", "user", "ada")
}

Szybkie sprawdzenie

Sprawdź, czy rozumiesz działanie handlerów slog.

Podsumowanie

Nauczyli się Państwo korzystać z handlerów slog:

  • Handlery formatują i zapisują rekordy, a Logger je wywołuje
  • NewTextHandler służy ludziom, a NewJSONHandler maszynom
  • Handlery przyjmują dowolny io.Writer oraz *HandlerOptions
  • slog.SetDefault podłącza funkcje pakietowe

Często zadawane pytania

Czy lekcja „Handlery slog” jest bezpłatna?

Tak — pełny tekst „Handlery slog” 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 „Handlery slog”?

Handlery tekstowe i JSON Ć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 2 z 4.

Ile czasu zajmuje lekcja „Handlery slog”?

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