Tekstlogs en structured logs
Deze tekstlog bevat dezelfde feiten als de structured log eronder.message en order_id. Het bericht blijft voor elke order hetzelfde, dus
je kunt het ook tellen.
Een logformaat kiezen
Gebruik JSON, met 1 object per regel. Gebruik in alle services dezelfde veldnamen. Deze tabel toont de basisvelden en de bijbehorende namen in het logdatamodel van OpenTelemetry en in LogBrew.
De ernstnummers van OpenTelemetry lopen van 1 tot 24.
INFO begint bij 9,
WARN bij 13, ERROR bij 17 en FATAL bij 21. LogBrew accepteert OTLP-logs
direct. Zie OpenTelemetry-gegevens verzenden.
Best practices voor logging
Houd het bericht vast
Schrijf"payment failed" en zet het order-ID in een veld. Met een vast bericht
kun je 1 type event groeperen, tellen en er alerts op zetten.
Gebruik 1 naam per veld
Kies één keerorder_id of orderId en gebruik die naam in alle services.
Gebruik voor veelgebruikte velden de namen uit de semantic conventions van
OpenTelemetry, zoals http.response.status_code.
Kies het level op basis van de actie die nodig is
error betekent dat een bewerking is mislukt. warning betekent dat het
programma is hersteld. info bevestigt normaal werk. Gebruik debug alleen
terwijl je een probleem zoekt.
Schrijf de tijd in UTC
Gebruik RFC 3339 met milliseconden en een offset, zoals2026-11-07T14:21:19.773+00:00. Zonder UTC en milliseconden komen records uit
verschillende tijdzones of records uit dezelfde seconde in de verkeerde
volgorde.
Voeg de trace-ID en span-ID toe
Met deze ID’s lees je alle logs van 1 request over services heen.Stel de service, omgeving en release één keer in
Configureer ze bij het opstarten en niet bij elke aanroep. Ontbreekt de release, dan zie je niet welke deployment een verandering veroorzaakte.Log een fout één keer, waar je hem afhandelt
Voeg het fouttype en het bericht toe. Log dezelfde fout niet opnieuw in elke laag.Houd secrets en persoonsgegevens buiten je logs
Log geen wachtwoorden, tokens, cookies, request-bodies of volledige URL’s met querystrings. Gebruik de afschermfunctie van je logger. Zie Vastgelegde gegevens beheren.Gebruik vaste veldnamen
Gebruik geen waarden als veldnamen, zoals{"ord_1001": "failed"}. Elke nieuwe
waarde voegt dan een nieuw veld toe, en 1 filter vindt dan niet alle orders.
Schrijf in productie JSON naar standard output
Gebruik een leesbaar formaat alleen in ontwikkeling.Structured logging in Python
De standaardmodulelogging heeft geen JSON-formatter. Deze formatter schrijft
de basisvelden en de waarden uit extra={"fields": {...}}.
LogBrewLoggingHandler toe om dezelfde records naar LogBrew te sturen. Hij
verstuurt het bericht, het level en de logger als velden, en primitieve waarden
uit extra als metadata. Zie Python logging.
Structured logging in Node.js
Pino schrijft standaard 1 JSON-regel per record. Winston schrijft JSON metwinston.format.json(). Beide bewaren velden uit de aanroep en uit child
loggers. Zie Node.js logging voor beide setups en
voor de trace-ID in Express-logs.
