Logging für TypeScript: Die besten Lösungen
Logging ist eine kritische Komponente jeder Produktionsanwendung. Für das TypeScript-Ökosystem gibt es zahlreiche Bibliotheken, die jeweils einzigartige Funktionen bieten. In diesem Artikel betrachten wir fünf der besten Lösungen: Winston, Pino, Bunyan, Log4js und TSLog. Sie erfahren ihre Stärken, Konfigurationsmöglichkeiten und erhalten fertige Codebeispiele.
1. Winston – Der universelle Standard
Winston ist die beliebteste Logging-Bibliothek für Node.js mit vollständiger TypeScript-Unterstützung. Sie bietet ein leistungsstarkes System für Transports (wohin Logs gesendet werden) und Formatierung.
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(), new winston.transports.File({ filename: 'error.log', level: 'error' }) ]});
logger.info('Anwendung gestartet', { service: 'user-service' });logger.error('Fehler bei der Datenbankverbindung', { error: err.message });Vorteile:
- Flexibles Transportsystem (Dateien, Konsole, HTTP, MongoDB, Elasticsearch)
- Integrierte Unterstützung für Log-Rotation über winston-daily-rotate-file
- Hervorragende Integration mit TypeScript – vollständige Typisierung
- Kompatibilität mit Profilern und APM-Systemen
2. Pino – Der superschnelle Logger
Pino ist auf Leistung ausgelegt – es ist 5-10 Mal schneller als Winston. Die ideale Wahl für High-Load-Systeme und Microservices.
import pino from 'pino';
const logger = pino({ level: process.env.LOG_LEVEL || 'info', transport: { target: 'pino-pretty', options: { colorize: true } }});
logger.info({ user: { id: 123 } }, 'Benutzer authentifiziert');Hauptmerkmale:
- Minimaler CPU- und Speicherverbrauch
- Native Unterstützung für Node.js streams
- Effiziente Objektserialisierung
- Unterstützung für Child-Logger für kontextbezogenes Logging
3. Bunyan – Strukturiertes Logging von Joyent
Bunyan wurde für die Arbeit mit Microservice-Architekturen entwickelt. Alle Logs werden im JSON-Format ausgegeben, was das Parsen und Analysieren vereinfacht.
import bunyan from 'bunyan';
const logger = bunyan.createLogger({ name: 'myapp', level: 'info', serializers: { req: bunyan.stdSerializers.req, err: bunyan.stdSerializers.err }});
logger.info({ req: request }, 'Eingehende Anfrage');Merkmale:
- Integrierte Serialisierer für HTTP-Anfragen und Fehler
- Unterstützung für Ringbuffer zum Speichern der letzten N Einträge
- Bunyan CLI-Dienstprogramm für formatierte Konsolenausgabe
- Einfache Integration mit dem ELK-Stack
4. Log4js – Vertrauter Ansatz aus Java
Log4js ist ein Port des beliebten Java-Frameworks Log4j. Es bietet eine vertraute Konfiguration über Ebenen und Appender.
import log4js from 'log4js';
log4js.configure({ appenders: { out: { type: 'stdout' }, app: { type: 'file', filename: 'application.log' } }, categories: { default: { appenders: ['out', 'app'], level: 'debug' } }});
const logger = log4js.getLogger();logger.debug('Verbindungsdebugging');logger.error('Kritischer Fehler');Stärken:
- Flexibles Kategorie- und Filtersystem
- Unterstützung für mehrere Appender (Dateien, Datenbanken, TCP)
- Möglichkeit, Ebenen für verschiedene Module zu überschreiben
- Integrierte Unterstützung für Clusterbildung
5. TSLog – Leichtgewichtige Lösung für TypeScript
TSLog ist eine minimalistische Bibliothek, die speziell für TypeScript entwickelt wurde. Ideal für kleine
Auch in der Bibliothek
OAuth-Client für TypeScript: Integration der Autorisierung in Webanwendungen
GuzzleHTTP/Promises für PHP: Komplette Anleitung mit Beispielen
JSON-Verarbeitung in Kotlin: Bibliotheken und Anwendungsbeispiele