xPulse
🇩🇪 DE

@xpulse/logger – Component Spec

Status: CONCEPT · Aktualisiert März 2026 Quelle: Chat v1.3.0 Code-Review Übergeordnet: GLOBAL_concept-ecosystem.md


Übersicht

Logging für Browser und Node.js unter einem gemeinsamen Interface.

Zwei Varianten unter einem Paket:

Variante Kontext Import
client Browser (PWA) @xpulse/logger/client
server Node.js @xpulse/logger/server

Dependencies

@xpulse/logger
└── @xpulse/config ← log.level + log.enabled aus xpulse.json / .env

Interface (gemeinsam)

// Server
import logger from '@xpulse/logger/server';
const log = logger.create('signaling');
// Client
import logger from '@xpulse/logger/client';
const log = logger.create('presence');
// Gemeinsames API
log.debug('verbindung aufgebaut', { peerId });
log.info('server gestartet', { port: 3000 });
log.warn('timeout überschritten', { ms: 75000 });
log.error('unbekannter fehler', { err });

Konfiguration via @xpulse/config

xpulse.json:

{
"log": {
"level": "info",
"enabled": true
}
}

.env:

LOG=true
DEBUG=false

Logger liest beim Start:

import logger from '@xpulse/logger/server';
await logger.init(); // liest config + .env

Variante: client

Funktionsweise

Styled Output

[HH:MM:SS.mmm] (debug) [presence] verbindung aufgebaut
[HH:MM:SS.mmm] (info ) [router] navigiere zu /peers
[HH:MM:SS.mmm] (warn ) [webrtc] ice candidate fehlt
[HH:MM:SS.mmm] (error) [session] entschlüsselung fehlgeschlagen

Farben:


Variante: server

Funktionsweise

Zusätzliche Exports (server)

import logger from '@xpulse/logger/server';
logger.formatIp(ip); // anonymisiert oder vollständig je nach DEBUG
logger.startup({ port }); // Startup-Zusammenfassung loggen

Log-Format (server)

[2026-03-09T10:23:45.123Z] (info ) xPulse Web gestartet | ENV=production | PORT=3000
[2026-03-09T10:23:46.001Z] (info ) GET /privacy/ 200 12ms
[2026-03-09T10:23:47.220Z] (warn ) health check failed | source=chat

Paket-Struktur

@xpulse/logger/
client.js ← Browser-Variante
server.js ← Node-Variante
levels.js ← gemeinsame Level-Konstanten (intern)
README.md
package.json

Debug Integration

Wenn @xpulse/debug als devDependency installiert ist, stellt @xpulse/logger automatisch einen DataCollector bereit. @xpulse/debug discovert ihn via node_modules/@xpulse/logger/src/datacollectors/ – keine Konfiguration nötig.

"optionalDependencies": {
"@xpulse/debug": "^1.0.0"
}

Der LoggerCollector (name: 'logger', icon: '📝') zeigt im Web Profiler:

Level-Farben: debug--accent2, info--text, warn#c0a060, error--danger

Badge in der Toolbar: Gesamtanzahl + Warnungen/Fehler, z.B. 12 · ⚠ 2 · ✗ 1. Badge wird nur gesetzt wenn mindestens eine Log-Zeile vorhanden ist.


Offene Fragen

Frage Stand
Gemeinsamer Entry-Point mit automatischer Env-Detection? TBD
Server-Logger: async file write statt sync appendFileSync? TBD
Client-Logger: level via @xpulse/event steuerbar? TBD
de/spec.md 2026-03-27