Logging für 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 für das Logging in TypeScript- und JavaScript-Anwendungen. Sie ermöglicht es, Logs an verschiedene Orte (Konsole, Dateien, Datenbanken) mit unterschiedlichen Wichtigkeitsstufen zu schreiben. Im Gegensatz zu einfachem console.log bietet Winston die volle Kontrolle über das Format der Logs, deren Rotation und Filterung.

Warum Winston verwenden? In großen Projekten wird die Standard-Konsolenausgabe nutzlos: Logs vermischen sich, gehen verloren und können nicht analysiert werden. Winston löst diese Probleme: Sie können konfigurieren, dass Fehler in eine separate Datei geschrieben werden, Informationsmeldungen in die Konsole und Debug-Daten in eine Datenbank. Dies ist für das Debugging, Monitoring und Auditing von entscheidender Bedeutung.

Installation

Für die Installation von Winston in einem TypeScript-Projekt führen Sie den folgenden Befehl aus:

npm install winston

Es wird auch empfohlen, die Typen zu installieren:

npm install --save-dev @types/winston

Wenn Sie yarn verwenden:

yarn add winston

Hauptfunktionen

  • Logging-Levels: error, warn, info, http, verbose, debug, silly. Jeder Level hat eine Priorität, und Sie können konfigurieren, welche Level in verschiedenen Transports ausgegeben werden.
  • Transports: Methoden zur Log-Ausgabe. Integriert: Console, File, Http, Stream. Sie können eigene erstellen.
  • Formate: Anpassung des Erscheinungsbilds der Logs (JSON, timestamp, farbige Ausgabe).
  • Datei-Rotation: Über das zusätzliche Modul winston-daily-rotate-file können automatisch neue Log-Dateien nach Tagen oder Größe erstellt werden.
  • Metadaten: Übergabe von zusätzlichem Kontext (z. B. Request-ID, Benutzername).

Codebeispiel in TypeScript

Erstellen wir einen einfachen Logger mit Ausgabe in die Konsole und eine Datei:

import winston from 'winston';

const 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.error('Fehler bei der Datenbankverbindung', { database: 'main' });

In diesem Beispiel: Informationsmeldungen werden in der Konsole (farbig) und in die Datei combined.log ausgegeben, Fehler zusätzlich in error.log. Das Log-Format ist JSON mit einem Zeitstempel.

Wann sollte Winston verwendet werden?

  • In einer Production-Umgebung zur Fehlerüberwachung.
  • In einer Microservices-Architektur zum Sammeln von Logs in einem zentralen Speicher.
  • Wenn eine Prüfung von Benutzeraktionen (Auditing) erforderlich ist.
  • In Projekten, die eine Log-Analyse mit ELK (Elasticsearch, Logstash, Kibana) oder anderen Systemen erfordern.

Winston ist der Industriestandard für das Logging in TypeScript. Es ist einfach einzurichten, skaliert aber auch für komplexe Anforderungen.

Empfehlungen