@logbrew/sdk 0.1.40, @logbrew/node 0.1.24 i @logbrew/express 0.1.10. Każdy
blok wyniku pokazuje prawdziwy wynik.
Wybierz Winston albo Pino
Obie biblioteki zapisują logi strukturalne w JSON. Zostań przy bibliotece, której twoja aplikacja już używa. Konfiguracja LogBrew jest inna dla każdej z nich.Przygotuj projekt LogBrew
1
Utwórz klucz projektu
Zaloguj się w CLI. Utwórz projekt i zapisz jego klucz
wysyłania w pliku, który może czytać tylko właściciel.CLI nie wyświetla klucza. Na produkcji używaj menedżera sekretów swojej
platformy.
2
Zainstaluj pakiety
Pakiety wymagają Node.js 18.19 lub nowszego. Zainstaluj Winston, Pino lub
obie biblioteki.
3
Ustaw klucz i tożsamość wdrożenia
createLogBrewNodeClient() odczytuje klucz z LOGBREW_SERVER_API_KEY.
Nazwa usługi to pole name z package.json. Ustaw LOGBREW_SERVICE_NAME,
aby użyć innej nazwy. Przykłady używają modułów ES, więc ustaw
"type": "module" w package.json.Poziomy logowania w Node.js
Każda biblioteka ma własne nazwy i liczby poziomów. LogBrew zapisuje 4 poziomy, a pierwotny poziom zachowuje w metadanych.
W Winstonie poważniejszy poziom ma niższą liczbę. W Pino poważniejszy poziom ma
wyższą liczbę. Na produkcji ustaw
info, a debug włączaj tylko na czas
krótkiej diagnozy.
Logger Winston
Zapisz ten plik jakowinston-app.js. Pierwszy format odrzuca rekordy poniżej
poziomu loggera, zanim dostanie je jakikolwiek transport. Transport LogBrew
dostaje każdy rekord, który zapisuje logger, więc potrzebuje tego filtra.
node winston-app.js. Konsola dostaje 1 wiersz JSON na każdy rekord z
poziomem info lub wyższym. Stos jest tu skrócony.
context.*.
Transport wysyła nazwę i komunikat błędu, ale nie stos. Aby wysłać stos, ustaw
includeErrorStack: true w createLogBrewWinstonTransport(). Każdy komunikat
staje się też breadcrumbem następnego problemu. Aby to wyłączyć, ustaw
breadcrumbs: false.
Logger Pino
Zapisz ten plik jakopino-app.js. Wywołaj
installLogBrewPinoInstrumentation() jeden raz, przed pierwszym logiem. Ta
funkcja odczytuje każdy gotowy rekord Pino. Pino nadal zapisuje logi do własnego
miejsca docelowego.
node pino-app.js. Nazwa hosta i stos są tu skrócone.
debug, zanim zobaczy go
LogBrew.
Pola
token nie ma w LogBrew. LogBrew odrzuca pola z poświadczeniami, plikami
cookie, treścią żądania, parametrami zapytania, adresami URL i stosem. Ścieżki
redact z Pino działają jako druga warstwa ochrony. pid, hostname i time
to domyślne pola Pino, więc LogBrew ich nie kopiuje.
Automatyczne przechwytywanie wymaga Pino 9.11 lub nowszego z linii 9.x albo Pino
10.1 lub nowszego. Dla starszych wersji Pino użyj
createLogBrewPinoDestination() z @logbrew/sdk jako miejsca docelowego Pino.
Aby czytelnie przeglądać wynik Pino w środowisku deweloperskim, przekaż go do
pino-pretty.
Logger dla Express
logbrewMiddleware() tworzy 1 span żądania na każde żądanie.
logbrewErrorHandler() zgłasza błędy jako problemy. Log Pino wewnątrz żądania
dostaje ID śladu i ID spanu tego żądania. Zapisz ten plik jako express-app.js.
Nazwa spanu używa szablonu trasy, a nie konkretnej ścieżki. Log
listening on 3000 nie ma śladu, bo powstaje poza żądaniem.
Pozwól, aby middleware tworzył własnych klientów żądań. Nie przekazuj do
logbrewMiddleware() ani do logbrewErrorHandler() klienta client, który
jest wspólny dla całego procesu. Middleware zamyka swojego klienta żądania po
każdej odpowiedzi.
Dodaj ślad do logów Winstona
W Winstonie przekaż transportowi aktywny ślad.logbrewTransport do listy transports loggera. Log Winstona wewnątrz
żądania Express ma wtedy ID śladu i ID spanu tego żądania.
Odczytaj logi
<trace_id> ze
śladu lub z problemu. Aby czytać logi z CI lub z agenta kodującego, użyj klucza
odczytu projektu. Szczegóły znajdziesz w przewodniku Sprawdź
konfigurację.
Zamknij aplikację bez utraty logów
Klient wysyła zdarzenia z kolejki 1 sekundę po pierwszym zdarzeniu albo po zebraniu 50 zdarzeń. Gdy pętla zdarzeń jest pusta, klient przez najwyżej 2 sekundy wysyła pozostałe zdarzenia.process.exit() i sygnały pomijają ten
krok. Przed wyjściem wywołaj await client.shutdown(), tak jak robi to handler
SIGTERM w przykładzie dla Express.
Rozwiązywanie problemów
Wybór pól logów opisuje przewodnik Logowanie
strukturalne. Inne frameworki opisuje
przewodnik Integracja SDK.
