32 lines
2.0 KiB
Markdown
32 lines
2.0 KiB
Markdown
---
|
|
name: project_logging
|
|
description: Logging-Lösung — pino-BE + offline-fähiger FE-Log-Sync; Board (Phase 3) noch offen
|
|
metadata:
|
|
node_type: memory
|
|
type: project
|
|
originSessionId: c4e04d11-9b40-4c6a-9333-ce3bbf949ba2
|
|
---
|
|
|
|
**Implementiert 2026-06-03 (Branch development), Phase 1+2:**
|
|
- **BE:** `nestjs-pino` als App-Logger → strukturiertes JSON auf stdout (Cluster-Pipeline frisst das).
|
|
Kein pino-Transport (bricht unter webpack); lokal `… | npx pino-pretty`. Sensible Header redacted,
|
|
`/health` vom Auto-Logging ausgenommen. Bestehende `Logger.*`-Aufrufe routen automatisch durch pino.
|
|
`LOG_LEVEL`-Env steuert das Level.
|
|
- **`POST /client-logs`** (SessionAuthGuard, `ClientLogModule`): nimmt FE-Log-Batches, schreibt sie mit
|
|
`source:'fe'` + Actor aus der **Session** (nicht aus dem Body), Batch-Cap 100.
|
|
- **FE:** `clientLog` (frontend-common, Singleton): gedeckelter In-Memory-Ring (200), Batch-Sync (50) an
|
|
`/client-logs` sobald online — Heartbeat-getriggert, gleiches Muster wie Outbox. Retry bei Fehler,
|
|
kein Log-Loop, Einträge PII-frei (message/stack/code/context/path, gekürzt). In `main.js` verdrahtet:
|
|
`window.onerror` + `unhandledrejection` + Vue `errorHandler`, früh im Boot. (Vorher gingen uncaught
|
|
FE-Fehler komplett verloren.)
|
|
- Geteilter Typ `ClientLogEntry` in `@plato/models`. Commits `6f78d4b` (BE) + `fcc62f2` (FE).
|
|
|
|
**Bewusste Tradeoffs:** FE-Puffer ist in-memory (kein Storage-Dependency, übersteht keinen Reload —
|
|
Sync läuft aber sofort bei capture/online). errorList (Toasts) ist NICHT an clientLog gekoppelt — nur
|
|
uncaught/globale Fehler werden gesynct (Bridging wäre ein leichter Zusatz).
|
|
|
|
**Phase 3 (offen):** das Board. Empfehlung Grafana/Loki (oder vorhandener Cluster-Stack) — JSON-stdout ist
|
|
schon board-ready. Sentry/GlitchTip nur falls Stacktrace-Grouping gewünscht (SaaS = Egress/Ticket-Risiko →
|
|
self-service beachten). **Offene Frage an Marcus:** was bietet der Würth-Cluster schon (Grafana/Loki, ELK)?
|
|
Eine kleine `logger`-Abstraktion hält einen späteren Sentry/OTEL-Wechsel call-site-frei.
|