forked from jappel/leistungsbilanz-ts
Add configurable structured logging
Adds a leveled JSON logger (error/warn/info/verbose/debug, controlled via LOG_LEVEL) wired into the Express API (access log, error middleware, crash handlers, memory heartbeat) and the Next.js server (page-request proxy, instrumentation crash handlers, heartbeat). LOG_LEVEL is exposed through compose.yaml, and both services now rotate their Docker logs (json-file, 20m x 10 files) instead of growing unbounded. Intended to capture long-running diagnostic data for the intermittent 502s seen on the Docker host. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
parent
f26c000007
commit
ea3c02cd6b
12 changed files with 317 additions and 6 deletions
|
|
@ -26,10 +26,39 @@ Verwendete Umgebungsvariablen:
|
|||
- `NEXT_TELEMETRY_DISABLED=1`
|
||||
- `CHOKIDAR_USEPOLLING=true` und `WATCHPACK_POLLING=true` für lokale
|
||||
Dateibeobachtung in Docker
|
||||
- `LOG_LEVEL` – steuert für beide Dienste die Ausgabestufe des strukturierten
|
||||
JSON-Loggers (`error`, `warn`, `info`, `verbose`, `debug`), Standard `info`.
|
||||
Setzbar über eine `.env`-Datei neben `compose.yaml` oder
|
||||
`LOG_LEVEL=verbose docker compose up`.
|
||||
|
||||
Beim API-Start laufen zuerst `npm run db:migrate` und
|
||||
`npm run db:verify:circuit-schema`.
|
||||
|
||||
## Logging
|
||||
|
||||
Beide Dienste schreiben strukturierte, einzeilige JSON-Log-Zeilen nach
|
||||
stdout/stderr (`docker compose logs --follow`). Jede Zeile enthält
|
||||
`timestamp`, `level`, `scope` und `message`. `compose.yaml` konfiguriert für
|
||||
beide Dienste den `json-file`-Treiber mit Rotation (`max-size: 20m`,
|
||||
`max-file: 10`, also bis zu 200 MB je Dienst); ohne diese Einstellung würde
|
||||
Docker mit der Standardkonfiguration unbegrenzt in eine einzelne Datei unter
|
||||
`/var/lib/docker/containers/<container-id>/` schreiben. Die Logs überleben
|
||||
einen Container-Neustart (`docker compose restart`), aber nicht das Entfernen
|
||||
des Containers (`docker compose down` gefolgt von `up` erzeugt neue
|
||||
Container und damit neue, leere Logdateien); für ein echtes Langzeitarchiv
|
||||
über Rebuilds hinweg müssten die Zeilen zusätzlich in eine Datei im
|
||||
gemounteten `./data`-Verzeichnis oder an ein externes Log-System geschrieben
|
||||
werden. Die Express-API protokolliert
|
||||
jede abgeschlossene Anfrage (Methode, Pfad, Status, Dauer; `/health` wird
|
||||
nicht mitgeloggt) sowie unbehandelte Exceptions/Promise-Rejections. Das
|
||||
Next.js-Frontend protokolliert Seitenanfragen (Navigation) über
|
||||
`src/proxy.ts` und unbehandelte Fehler über `src/instrumentation.ts`.
|
||||
Beide Prozesse schreiben zusätzlich alle fünf Minuten einen `verbose`-Heartbeat
|
||||
mit Laufzeit und Speicherverbrauch – nützlich, um Speicherlecks oder Hänger vor
|
||||
einem 502 über einen längeren Zeitraum nachzuvollziehen. Für die Detailsuche
|
||||
`LOG_LEVEL=debug` setzen; das protokolliert zusätzlich den Start jeder
|
||||
API-Anfrage und macht damit hängende (nie abgeschlossene) Requests sichtbar.
|
||||
|
||||
## Voraussetzungen für ein späteres Produktionssetup
|
||||
|
||||
Vor einer produktiven Installation werden mindestens benötigt:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue