© 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.

Sebastian Springer


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 Loggersconst 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 Express-Applikation mit integriertem Logger:

app.listen(8080, () => { logger.info('Server running');});

Loglevels

Das Loglevel gibt die Wichtigkeit des Logeintrags an. Die Levels reichen vom unkritischsten silly bis zum schwerwiegenden error. Insgesamt unterstützt Winston in der Standardkonfiguration sechs Loglevels in aufsteigender Wichtigkeit: silly, debug, verbose, info, warn und e...

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


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 Loggersconst 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 Express-Applikation mit integriertem Logger:

app.listen(8080, () => { logger.info('Server running');});

Loglevels

Das Loglevel gibt die Wichtigkeit des Logeintrags an. Die Levels reichen vom unkritischsten silly bis zum schwerwiegenden error. Insgesamt unterstützt Winston in der Standardkonfiguration sechs Loglevels in aufsteigender Wichtigkeit: silly, debug, verbose, info, warn und e...

Neugierig geworden?


   
Loading...

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