winston

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

Was ist winston und wofür wird es benötigt?

Winston ist die beliebteste Bibliothek für das Logging in der Node.js-Umgebung. Sie bietet eine einfache, universelle API, mit der Sie Logs mit verschiedenen Wichtigkeitsstufen schreiben, formatieren und an verschiedene Orte (Konsole, Dateien, Datenbanken, externe Dienste) senden können. Im Gegensatz zu einem einfachen console.log gibt Ihnen winston die volle Kontrolle über das Logging: Sie können die Log-Rotation nach Größe oder Datum konfigurieren, Nachrichten nach Level filtern (info, warn, error, debug), Metadaten hinzufügen (Zeit, Anfrage-ID) und sogar mehrere Transports gleichzeitig verwenden. Es ist ein unverzichtbares Werkzeug für Monitoring, Debugging und Auditing in Production-Anwendungen.

Installation

Installieren Sie winston über npm oder yarn:

npm install winston# oderyarn add winston

Grundlegende Funktionen

  1. Logging-Level: error, warn, info, http, verbose, debug, silly.
  2. Transports: Console, File, HTTP, Stream und benutzerdefinierte.
  3. Formate: JSON, einfacher Text, Zeitstempel, farbige Ausgabe.
  4. Kombination mehrerer Transports: z. B. Fehler in eine Datei, info in die Konsole.
  5. Benutzerdefinierte Transports und Formate: Integration mit Logstash, Sentry, Papertrail und anderen möglich.
  6. Log-Rotation: über das zusätzliche Modul winston-daily-rotate-file.
  7. Ausnahmen und unbehandelte Zurückweisungen (unhandled rejections): automatisches Abfangen unbehandelter Fehler.

Codebeispiel in JavaScript (Node.js)

const winston = require('winston');

// Logger erstellenconst logger = winston.createLogger({ level: 'info', format: winston.format.combine( winston.format.timestamp(), winston.format.json() ), transports: [ new winston.transports.Console({ format: winston.format.combine( winston.format.colorize(), winston.format.simple() ) }), new winston.transports.File({ filename: 'error.log', level: 'error' }), new winston.transports.File({ filename: 'combined.log' }) ]});

// Verwendunglogger.info('Server gestartet auf Port 3000');logger.warn('Nicht genügend Speicher', { memoryUsage: process.memoryUsage() });try { throw new Error('Etwas ist kaputt gegangen');} catch (err) { logger.error('Fehler bei der Verarbeitung der Anfrage', { error: err.message, stack: err.stack });}

Wann verwenden

Winston ist ideal für jedes Node.js-Projekt, das strukturiertes Logging erfordert: Webserver (Express, Koa), Microservices, CLI-Tools, Bots, ETL-Prozesse. Es ist besonders nützlich in einer Production-Umgebung, in der Logs zentral gesammelt, Fehler analysiert und Probleme schnell gefunden werden müssen. Wenn Ihr Projekt TypeScript verwendet, bietet winston volle Typunterstützung.

Alternativen: pino (schneller, schlanker), log4js (Konfiguration über XML/JSON), bunyan (JSON-Logs). Aber winston bleibt die flexibelste und am weitesten verbreitete Lösung.

Empfehlungen