© saicle/Shutterstock.com
PHP Magazin
Ein Logger für jede Gelegenheit

Node.js-Module: Winston


Mit Node.js lassen sich Applikationen sehr schnell entwickeln. Dinge, die in der Anfangseuphorie allerdings schnell zu kurz kommen, sind die Behandlung von Fehlern, Testing oder Logging – also das Festhalten von Nachrichten beispielsweise in einer Logdatei. Mit Winston gibt es eine frameworkunabhängige Bibliothek für Node.js, die Ihnen die Aufgabe des Loggings erheblich vereinfacht.

Einfach bedeutet jedoch nicht gleichzeitig unflexibel, wie Sie im Folgenden noch sehen werden, denn nahezu sämtliche Aspekte von Winston sind konfigurierbar. Angefangen bei den Loglevels über das Format der Logmeldungen bis hin zum Transport, können Sie Winston ganz nach Ihren Anforderungen beeinflussen.

Installation

Zum Zeitpunkt des Verfassens dieses Artikels befand sich Winston gerade an der Schwelle zur Version 3. Ein Major-Release bedeutet in der Regel auch eine Reihe von Breaking Changes. Dieser Artikel bezieht sich auf die neue Version.

Die Installation von Winston erfolgt über npm mit dem Kommando npm install winston@next. Nach der Installation wird der Logger konfiguriert und kann anschließend verwendet werden. Normalerweise erfolgt die Konfiguration in einer separaten Datei, die die Logger-Instanz exportiert. Das hat den Vorteil, dass Sie nur die Datei importieren müssen und den Logger dann sofort verwenden können.

Listing 1: Erzeugung eines Loggers

const appLogger = winston.createLogger({ level: 'info', format: winston.format.json(), transports: [ new winston.transports.File({ filename: 'logs/app.log' }) ] }); module.exports = appLogger;

Wie Sie Listing 1 entnehmen können, erzeugen Sie den Logger mit der Methode createLogger. Ihr übergeben Sie ein Konfigurationsobjekt, über das Sie die Basisfunktionalität des Loggers einstellen. Das Level gibt das minimale Loglevel der Nachrichten an, die festgehalten werden. Nachrichten mit einem niedrigeren Level werden von diesem Logger ignoriert. Die Formateigenschaft legt das Format der Logeinträge fest. Im Fall unseres Beispiels werden JSON-Zeichenketten mit den Eigenschaften message und level ins Log geschrieben. Mit der Eigenschaft transports können Sie schließlich angeben, wohin Winston das Log schreiben soll. Der im Beispiel verwendete File Transport schreibt das Log in das lokale Dateisystem. Um nun einen Logeintrag zu schreiben, binden Sie den Logger ein und rufen beispielsweise die info-Methode auf, um einen Eintrag des entsprechenden Levels zu erzeugen. Das nachfolgende Beispiel zeigt Ihnen einen Ausschnitt aus einer...

PHP Magazin
Ein Logger für jede Gelegenheit

Node.js-Module: Winston

Mit Node.js lassen sich Applikationen sehr schnell entwickeln. Dinge, die in der Anfangseuphorie allerdings schnell zu kurz kommen, sind die Behandlung von Fehlern, Testing oder Logging - also das Festhalten von Nachrichten beispielsweise in einer Logdatei. Mit Winston gibt es eine frameworkunabhängige Bibliothek für Node.js, die Ihnen die Aufgabe des Loggings erheblich vereinfacht.

Sebastian Springer


Mit Node.js lassen sich Applikationen sehr schnell entwickeln. Dinge, die in der Anfangseuphorie allerdings schnell zu kurz kommen, sind die Behandlung von Fehlern, Testing oder Logging – also das Festhalten von Nachrichten beispielsweise in einer Logdatei. Mit Winston gibt es eine frameworkunabhängige Bibliothek für Node.js, die Ihnen die Aufgabe des Loggings erheblich vereinfacht.

Einfach bedeutet jedoch nicht gleichzeitig unflexibel, wie Sie im Folgenden noch sehen werden, denn nahezu sämtliche Aspekte von Winston sind konfigurierbar. Angefangen bei den Loglevels über das Format der Logmeldungen bis hin zum Transport, können Sie Winston ganz nach Ihren Anforderungen beeinflussen.

Installation

Zum Zeitpunkt des Verfassens dieses Artikels befand sich Winston gerade an der Schwelle zur Version 3. Ein Major-Release bedeutet in der Regel auch eine Reihe von Breaking Changes. Dieser Artikel bezieht sich auf die neue Version.

Die Installation von Winston erfolgt über npm mit dem Kommando npm install winston@next. Nach der Installation wird der Logger konfiguriert und kann anschließend verwendet werden. Normalerweise erfolgt die Konfiguration in einer separaten Datei, die die Logger-Instanz exportiert. Das hat den Vorteil, dass Sie nur die Datei importieren müssen und den Logger dann sofort verwenden können.

Listing 1: Erzeugung eines Loggers

const appLogger = winston.createLogger({ level: 'info', format: winston.format.json(), transports: [ new winston.transports.File({ filename: 'logs/app.log' }) ] }); module.exports = appLogger;

Wie Sie Listing 1 entnehmen können, erzeugen Sie den Logger mit der Methode createLogger. Ihr übergeben Sie ein Konfigurationsobjekt, über das Sie die Basisfunktionalität des Loggers einstellen. Das Level gibt das minimale Loglevel der Nachrichten an, die festgehalten werden. Nachrichten mit einem niedrigeren Level werden von diesem Logger ignoriert. Die Formateigenschaft legt das Format der Logeinträge fest. Im Fall unseres Beispiels werden JSON-Zeichenketten mit den Eigenschaften message und level ins Log geschrieben. Mit der Eigenschaft transports können Sie schließlich angeben, wohin Winston das Log schreiben soll. Der im Beispiel verwendete File Transport schreibt das Log in das lokale Dateisystem. Um nun einen Logeintrag zu schreiben, binden Sie den Logger ein und rufen beispielsweise die info-Methode auf, um einen Eintrag des entsprechenden Levels zu erzeugen. Das nachfolgende Beispiel zeigt Ihnen einen Ausschnitt aus einer...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang