Logging in TypeScript: die Bibliothek 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 warum wird es benötigt?

Winston ist eine leistungsstarke und flexible Bibliothek zum Loggen in TypeScript- und JavaScript-Anwendungen. Sie ermöglicht das strukturierte Aufzeichnen von Nachrichten verschiedener Ebenen (info, warn, error, debug) in der Konsole, in Dateien, Datenbanken oder externen Diensten. Winston löst das Problem des fehlenden integrierten Logging-Mechanismus in Node.js, indem es eine praktische API zur Konfiguration von Formaten, Transports (wohin die Logs geschrieben werden) und Wichtigkeitsstufen bereitstellt. Die Bibliothek wird häufig in Produktionsprojekten, Microservices und Webanwendungen eingesetzt.

Installation

Für die Installation von winston in einem TypeScript-Projekt führen Sie Folgendes aus:

npm install winstonnpm install --save-dev @types/winston

Oder über yarn:

yarn add winstonyarn add --dev @types/winston

Hauptfunktionen

  • Logging-Ebenen: error, warn, info, http, verbose, debug, silly (eigene können konfiguriert werden).
  • Transports: Console, File, HTTP, Stream sowie benutzerdefinierte (z. B. in Elasticsearch).
  • Formate: JSON, einfacher Text, timestamp, Labels, Farben in der Konsole.
  • Mehrere Transports: gleichzeitiges Schreiben in Konsole und Datei.
  • Ausnahmen loggen: automatisches Abfangen von uncaughtException.
  • Proxy-Wrapper für TypeScript: typisierter Logger mit Autovervollständigung.

Codebeispiel in TypeScript

import winston from 'winston';

const logger = winston.createLogger({ level: 'info', format: winston.format.combine( winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), 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('Niedriger Arbeitsspeicher');logger.error('Fehler bei der Datenbankverbindung', { error: err });

Wann winston verwenden

Winston ist ideal geeignet für:

  • Backend-Anwendungen auf Node.js/TypeScript (Express, NestJS, Fastify).
  • Microservice-Architektur — zentrale Log-Erfassung über HTTP-Transport.
  • Produktionsüberwachung — Schreiben von Logs in Dateien mit Rotation (winston-daily-rotate-file).
  • Debugging und Entwicklung — farbige Konsolenausgabe mit verschiedenen Ebenen.
  • Systeme mit Audit-Anforderungen — strukturierte Logs im JSON-Format zur Analyse.

Verwenden Sie winston nicht in einfachen Skripten, bei denen console.log ausreicht — für kleine Projekte ist es überdimensioniert. Vermeiden Sie winston auch in clientseitigen Browser-Anwendungen (dort sind console oder spezialisierte Bibliotheken besser geeignet).

Fazit

Winston ist der De-facto-Standard für das Logging in TypeScript-Projekten. Es bietet Flexibilität, Leistung und Typsicherheit bei korrekter Konfiguration. Beginnen Sie mit einem einfachen Logger und erweitern Sie ihn mit dem Wachstum der Anwendung.

Empfehlungen