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
NewTextHandlersłuży ludziom, aNewJSONHandlermaszynom- Handlery przyjmują dowolny
io.Writeroraz*HandlerOptions slog.SetDefaultpodłą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.