Logi tekstowe i logi strukturalne
Ten log tekstowy zawiera te same fakty co log strukturalny pod nim.message i order_id. Komunikat jest taki sam dla każdego
zamówienia, więc możesz też go policzyć.
Wybierz format logów
Używaj JSON z 1 obiektem w każdym wierszu. We wszystkich usługach używaj tych samych nazw pól. Ta tabela pokazuje pola podstawowe i odpowiadające im nazwy w modelu danych logów OpenTelemetry i w LogBrew.
Numery ważności w OpenTelemetry mają zakres od 1 do 24.
INFO zaczyna się od 9,
WARN od 13, ERROR od 17, a FATAL od 21. LogBrew przyjmuje logi OTLP
bezpośrednio. Szczegóły znajdziesz w przewodniku OpenTelemetry
(OTLP).
Dobre praktyki logowania
Używaj stałego komunikatu
Napisz"payment failed", a ID zamówienia umieść w osobnym polu. Stały
komunikat pozwala grupować i liczyć 1 typ zdarzenia oraz ustawiać dla niego
alerty.
Używaj 1 nazwy dla każdego pola
Wybierz razorder_id albo orderId i używaj tej nazwy we wszystkich usługach.
Dla typowych pól używaj nazw z konwencji semantycznych OpenTelemetry, na
przykład http.response.status_code.
Dobieraj poziom do potrzebnej reakcji
error oznacza, że operacja się nie udała. warning oznacza, że program wrócił
do normalnej pracy. info potwierdza zwykłe działanie. Używaj debug tylko
podczas szukania przyczyny błędu.
Zapisuj czas w UTC
Używaj RFC 3339 z milisekundami i przesunięciem strefy czasowej, na przykład2026-11-07T14:21:19.773+00:00. Bez UTC i milisekund rekordy z różnych stref
czasowych albo rekordy z tej samej sekundy układają się w złej kolejności.
Dodaj ID śladu i ID spanu
Dzięki tym ID odczytasz wszystkie logi 1 żądania w wielu usługach.Ustaw raz usługę, środowisko i wydanie
Skonfiguruj je przy starcie, a nie w każdym wywołaniu. Bez wydania nie widać, które wdrożenie spowodowało zmianę.Loguj błąd raz, tam gdzie go obsługujesz
Dodaj typ i komunikat błędu. Nie loguj tego samego błędu ponownie w każdej warstwie.Nie zapisuj sekretów ani danych osobowych
Nie loguj haseł, tokenów, plików cookie, treści żądań ani pełnych adresów URL z parametrami zapytania. Używaj funkcji maskowania w swoim loggerze. Szczegóły znajdziesz w przewodniku Kontrola rejestrowanych danych.Używaj stałych nazw pól
Nie używaj wartości jako nazw pól, tak jak w{"ord_1001": "failed"}. Każda
nowa wartość dodaje wtedy nowe pole, a 1 filtr nie znajdzie wszystkich zamówień.
Na produkcji zapisuj JSON na standardowe wyjście
Czytelnego formatu używaj tylko w środowisku deweloperskim.Logowanie strukturalne w Pythonie
Standardowy modułlogging nie ma formattera JSON. Ten formatter zapisuje pola
podstawowe i wartości z extra={"fields": {...}}.
LogBrewLoggingHandler. Handler
wysyła komunikat, poziom i logger jako pola, a proste wartości extra jako
metadane. Szczegóły znajdziesz w przewodniku Logowanie w
Pythonie.
Logowanie strukturalne w Node.js
Pino domyślnie zapisuje 1 wiersz JSON na każdy rekord. Winston zapisuje JSON zwinston.format.json(). Obie biblioteki zachowują pola z wywołania i z loggerów
potomnych. Obie konfiguracje i ID śladu w logach Express opisuje przewodnik
Logowanie w Node.js.
