Logging für JavaScript (Node.js): Die besten Lösungen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Logging für JavaScript (Node.js): Die besten Lösungen



Logging ist die Grundlage für das Monitoring und Debugging jeder Webanwendung. In der Welt von Node.js gibt es mehrere ausgereifte und beliebte Bibliotheken, die eine flexible Konfiguration der Erfassung, Formatierung und Speicherung von Logs ermöglichen. In diesem Artikel betrachten wir vier der besten Lösungen: Winston, Pino, Bunyan und Morgan. Sie erfahren ihre Besonderheiten, Stärken und erhalten praktische Anwendungsbeispiele.



Warum ist Logging in Node.js wichtig?

Im Gegensatz zu browserbasiertem JavaScript arbeitet eine Serveranwendung ohne direkten Zugriff auf die Entwicklerkonsole. Logs ermöglichen:

  • Die Verfolgung von Fehlern und Ausnahmen in Echtzeit.
  • Die Analyse der Leistung (Antwortzeit, Anfragen).
  • Die Erfassung von Audit-Ereignissen (Benutzeranmeldung, Datenänderungen).
  • Die Integration mit externen Überwachungssystemen (ELK, Datadog, Splunk).


1. Winston – Der universelle Standard

Winston ist die beliebteste Logging-Bibliothek für Node.js. Ihr Hauptvorteil sind die Transports (wohin Logs geschrieben werden) und die Formate (wie sie dargestellt werden).

Installation:

npm install winston


Beispiel einer Basiskonfiguration:

const winston = require('winston');

const logger = winston.createLogger({ level: 'info', format: winston.format.json(), transports: [ new winston.transports.Console(), new winston.transports.File({ filename: 'combined.log' }) ]});

logger.info('Server gestartet auf Port 3000');logger.error('Fehler bei der Datenbankverbindung', { db: 'main' });


Wichtige Funktionen:

  • Unterstützung mehrerer Transports (Konsole, Datei, HTTP, MongoDB, Elasticsearch).
  • Benutzerdefinierte Formate (JSON, Klartext, mit Zeitstempeln).
  • Filterung nach Level (error, warn, info, verbose, debug, silly).
  • Erstellung von Child-Loggern für verschiedene Module.

Wann wählen: Für komplexe Projekte, die eine flexible Log-Routing und Integration mit externen Diensten erfordern.



2. Pino – Der extrem schnelle Logger

Pino wurde für maximale Leistung entwickelt. Er ist 5-10 Mal schneller als Winston dank der Verwendung von strukturiertem JSON und der Minimierung von Overhead.

Installation:

npm install pino


Anwendungsbeispiel:

const pino = require('pino');

const logger = pino({ level: 'info', transport: { target: 'pino-pretty', // für schöne Konsolenausgabe options: { colorize: true } }});

logger.info({ user: 42 }, 'Benutzer hat sich angemeldet');logger.error(new Error('Datei konnte nicht geladen werden'));


Besonderheiten:

  • Minimaler CPU- und Speicherverbrauch.
  • Integrierte Unterstützung für pino-pretty für die Entwicklung.
  • Arbeit mit Streams zur Integration mit anderen Tools.
  • Automatische Objektserialisierung ohne Leistungseinbußen.

Wann wählen: Für hochlastige Anwendungen (APIs, Microservices), bei denen jede Millisekunde zählt.



3. Bunyan – Strukturierte Logs von den Joyent-Entwicklern

Bunyan von der Firma Joyent (den Entwicklern von Node.js) konzentriert sich auf eine strenge Log-Struktur. Jede Nachricht ist ein JSON-Objekt mit Pflichtfeldern (hostname, pid, time).

Installation:

npm install bunyan


Beispiel:

const bunyan = require('bunyan');

const logger = bunyan.createLogger({ name: 'myapp', streams: [ { level: 'info', stream: process.stdout }, { level: 'error', path: 'error.

Empfehlungen