9 Node.js-Logger-Bibliotheken, die Sie für eine bessere Protokollierung ausprobieren können

Veröffentlicht: 2022-09-01

Haben Sie Probleme mit dem Debuggen Ihres Codes? Suchen Sie nach Protokollierungslösungen, die das Debuggen erleichtern könnten? Lesen Sie weiter, um mehr zu erfahren.

Die Softwareentwicklung durchläuft mehrere Phasen: Anforderungserfassung, Analyse, Codierung, Test und Wartung. Von all diesen Phasen erfordert die Codierungs-/Entwicklungsphase viel Zeit und Mühe. Softwareingenieure beschäftigen sich mit Syntaxfehlern, logischen Fehlern und Laufzeitfehlern. Syntaktische Fehler werden zur Kompilierzeit identifiziert und treten auf, weil der Code sich nicht an die Regeln einer Programmiersprache hält.

Andererseits können logische und Laufzeitfehler von der integrierten Entwicklungsumgebung (IDE) nicht identifiziert werden und sind oft schwierig zu debuggen und zu beheben. Das Beheben von Fehlern ist ein zeitaufwändiger Prozess und erfordert viel Debugging.

Debugging ist ein Prozess, bei dem versucht wird zu verstehen, warum der geschriebene Code nicht wie erwartet funktioniert. Es ist einfach, das Problem zu lösen, wenn wir den Fehler und die genauen Zeilen im Code kennen, in denen er auftritt. Daher ist die Protokollierung sehr nützlich für das Debuggen von Code.

Was ist Protokollierung?

Die Protokollierung ist eine Technik, bei der Nachrichten während der Ausführung eines Programms erfasst werden. Man muss nur die Meldungen protokollieren, die ihnen beim Debuggen helfen könnten. Daher ist es äußerst wichtig zu wissen, wann Protokollanweisungen zum Code hinzugefügt werden müssen. Ebenso wichtig ist die Unterscheidung zwischen Protokollanweisungen. Es gibt verschiedene Ebenen der Protokollierung, wie Info, Warnung, Fehler, Debug und Ausführlich. Fehler- und Warnanweisungen werden für die Ausnahmebehandlung verwendet.

Von Funktionen zurückgegebene Daten, Ergebnisse nach Array-Manipulation, von APIs abgerufene Daten usw. sind einige Beispiele für Daten, die mit info-Anweisungen protokolliert werden können. Die Debug- und ausführlichen Protokolle werden verwendet, um eine detaillierte Beschreibung der Fehler zu geben.

Das Debug-Log gibt Auskunft über den Stack-Trace, Input-Output-Parameter usw. „Verbose“ ist nicht so detailliert wie das „Debug“-Log, sondern listet alle aufgetretenen Ereignisse auf. Protokolle werden in die Konsole, Dateien und den Ausgabestream geschrieben. Protokollverwaltungstools können für eine strukturierte und formatierte Protokollierung verwendet werden.

Node.js-Protokollierung

Nodejs ist eine Javascript-Laufzeitumgebung. Node.js-Anwendungen sind asynchron und nicht blockierend und werden in datenintensiven und Echtzeitsystemen verwendet. Der beste Weg, mehr über Node.js zu erfahren, besteht darin, die Node.js-Tutorials und die zugehörige Dokumentation durchzugehen. Die Protokollierung ist für verbesserte Leistung, Fehlerbehebung und Fehlerverfolgung erforderlich. Das Einloggen in Node.js kann über die eingebaute Funktion console.log erfolgen. Außerdem ist die Debug-Funktion mit mehreren Paketen verknüpft und kann effektiv verwendet werden.

Middleware wird zum Verwalten von Anfragen und Antworten verwendet. Middleware kann eine Anwendung oder ein beliebiges anderes Javascript-Framework sein. Die Anmeldung bei Middleware kann über Anwendungen und Router erfolgen. Jeder Node.js-Logger muss den Befehl „npm“ oder „garn install“ verwenden, um die Logger zu installieren.

Npm steht für „Node Package Manager“ und YARN steht für „Yet Another Resource Negotiator“. Allerdings wird Yarn gegenüber npm bevorzugt, da es schneller ist und Pakete parallel installiert.

Einige der besten Node.js-Logger sind unten aufgeführt:

Pino

Pino ist eine Bibliothek, die einer der besten Logger für Node.js-Anwendungen ist. Es ist Open Source, extrem schnell und protokolliert die Anweisungen in einem leicht lesbaren JSON-Format. Einige der Pino-Protokollebenen sind – Debug-, Warn-, Fehler- und Info-Meldungen. Eine Pino-Loggerinstanz kann in das Projekt importiert werden, und die console.log-Anweisungen müssen durch logger.info-Anweisungen ersetzt werden.

YouTube-Video

Verwenden Sie den folgenden Befehl, um Pino zu installieren:

 $ npm install pino

Die generierten Protokolle sind ausführlich und im JSON-Format, wobei die Zeilennummer des Protokolls, der Protokolltyp, die Zeit, zu der es protokolliert wurde, usw. hervorgehoben werden. Pino verursacht minimalen Overhead für die Protokollierung in einer Anwendung und ist bei der Verarbeitung von Protokollen äußerst flexibel.

Pino kann in Web-Frameworks wie Hapi, Restify, Express usw. integriert werden. Von Pino generierte Protokolle können auch in Dateien gespeichert werden. Es verwendet Worker-Threads für den Betrieb und ist mit TypeScript kompatibel.

Winston

Winston unterstützt die Protokollierung für verschiedene Web-Frameworks mit dem Hauptaugenmerk auf Flexibilität und Erweiterbarkeit. Es unterstützt mehrere Transportarten und kann Protokolle an verschiedenen Dateispeicherorten speichern. Transporte sind Orte, an denen die Protokollmeldungen gespeichert werden.

Neben einigen integrierten Transporten wie Http, Console, File und Stream unterstützt es andere Transporte wie Cloud Watch und MongoDB. Es protokolliert unter verschiedenen Ebenen und Formaten. Protokollierungsebenen geben den Schweregrad des Problems an.

YouTube-Video

Die verschiedenen Protokollierungsebenen sind wie folgt:

 { error: 0, warn: 1, info: 2, http: 3, verbose: 4, debug: 5, silly: 6 }

Das Protokollausgabeformat kann ebenfalls angepasst, gefiltert und kombiniert werden. Protokolle enthalten Informationen über den Zeitstempel, mit einem Protokoll verknüpfte Labels, seit dem vorherigen Protokoll verstrichene Millisekunden usw.

Winston kümmert sich auch um Ausnahmen und nicht abgefangene Versprechen. Es bietet zusätzliche Funktionen wie Ablage zur Laufzeit von Abfragen, Streaming-Protokolle usw. Zunächst muss Winston installiert werden. Dann wird ein Winston-Konfigurationsobjekt zusammen mit dem Transport zum Speichern des Protokolls erstellt. Ein Logger-Objekt wird mit der Funktion createLogger() erstellt und die Log-Meldung an ihn übergeben.

Knoten-Bunyan

Bunyan wird zum schnellen Einloggen in node.js im JSON-Format verwendet. Es bietet auch ein CLI-Tool (Command Line Interface) zum Anzeigen der Protokolle. Es ist leichtgewichtig und unterstützt verschiedene Laufzeitumgebungen wie Node.js, Browserify, WebPack und NW.js. Das JSON-Format der Protokolle wird durch die hübsche Druckfunktion weiter verschönert. Protokolle haben verschiedene Ebenen wie fatal, error, warn, info, debug und trace; jedem ist ein numerischer Wert zugeordnet.

Alle Ebenen über der für die Instanz festgelegten Ebene werden protokolliert. Bunyan Stream ist ein Ort, an dem die Ausgaben protokolliert werden. Unterkomponenten einer Anwendung können mit der Funktion log.child() protokolliert werden. Alle untergeordneten Logger sind an eine bestimmte übergeordnete Anwendung gebunden. Der Stream-Typ kann eine Datei, eine rotierende Datei, Rohdaten usw. sein. Das Codebeispiel zum Definieren eines Streams ist unten dargestellt:

 var bunyan = require('bunyan'); var log = bunyan.createLogger({ name: "foo", streams: [ { stream: process.stderr, level: "debug" }, ... ] });

Bunyan unterstützt auch die DTrace-Protokollierung. Die an der DTrace-Protokollierung beteiligten Prüfpunkte umfassen log-trace, log-warn, log-error, log-info, log-debug und log-fatal. Bunyan verwendet Serialisierer, um die Protokolle im JSON-Format zu erstellen. Serialisierungsfunktionen lösen keine Ausnahmen aus und sind defensiv.

Protokollebene

Loglevel wird für die Protokollierung in Javascript-Anwendungen verwendet. Es ist auch einer der besten Logger von Node.j, da es leicht und einfach ist. Es protokolliert die angegebene Ebene und verwendet eine einzelne Datei ohne Abhängigkeiten für die Protokollierung. Die Standardprotokollebene ist „warn“. Die Protokollausgaben sind zusammen mit Zeilennummern gut formatiert. Einige Methoden, die für die Protokollierung verwendet werden, sind Trace, Debug, Warn, Error und Info.

Sie sind ausfallsicher in jeder Umgebung. getLogger() ist die Methode, die zum Abrufen des Logger-Objekts verwendet wird. Es kann auch mit anderen Plugins kombiniert werden, um seine Funktionen zu erweitern. Einige der Plugins beinhalten loglevel-plugin-prefix, loglevel-plugin-remote, ServerSend und DEBUG. Das Plugin zum Hinzufügen von Präfixmeldungen zur Protokollierung ist unten dargestellt:

 var originalFactory = log.methodFactory; log.methodFactory = function (methodName, logLevel, loggerName) { var rawMethod = originalFactory(methodName, logLevel, loggerName); return function (message) { rawMethod("Newsflash: " + message); }; }; log.setLevel(log.getLevel()); // Be sure to call setLevel method in order to apply plugin

Die Builds werden mit dem Befehl npm run dist ausgeführt, und die Tests können mit dem Befehl npm test ausgeführt werden. Die Protokollebene unterstützt Webjar-, Bower- und Atmosphere-Pakete. Eine neue Version von Loglevel wird veröffentlicht, sobald neue Funktionen hinzugefügt werden.

Signale

Signale besteht aus 19 Loggern für Javascript-Anwendungen. Es unterstützt TypeScript und bereichsbezogene Protokollierung. Es besteht aus Timern, die helfen, den Zeitstempel, die Daten und den Dateinamen zu protokollieren. Abgesehen von den 19 Loggern wie await, complete, fatal, fav, info usw. kann man benutzerdefinierte Logs erstellen.

Benutzerdefinierte Protokolle werden erstellt, indem ein JSON-Objekt und Felder mit den Protokolldaten definiert werden. Es können auch interaktive Logger erstellt werden. Wenn ein interaktiver Logger auf „true“ gesetzt ist, überschreiben neue Werte von interaktiven Loggern die alten.

Das Beste an Signalen ist die Fähigkeit, geheime oder sensible Informationen herauszufiltern. Mehrere Geheimnisse werden in einem Array gespeichert. addSecrets() und clearSecrets() sind die Funktionen, die zum Hinzufügen und Löschen der Geheimnisse aus dem Array verwendet werden. Boostnote, Docz, Shower, Taskbook und Vant verwenden Signale für die Protokollierung. Die Syntax zum Aufrufen von APIs von Signale lautet wie folgt:

 signale.<logger>(message[,message]|messageObj|errorObj)

Die Zahl der Signale-Downloads liegt zum Zeitpunkt der Erstellung dieses Artikels bei über 1 Million.

Tracer

Tracer wird zur Erstellung detaillierter Logging-Meldungen verwendet. Protokollmeldungen bestehen aus Zeitstempeln, Dateinamen, Zeilennummern und Methodennamen. Hilfspakete können installiert werden, um das Ausgabeprotokollierungsformat anzupassen. Die Hilfspakete können mit dem folgenden Befehl installiert werden.

 npm install -dev tracer

Tracer unterstützt Datei-, Stream- und MongoDB-Transport. Es unterstützt Farbkonsolen und Filterbedingungen bei der Protokollierung. Zunächst muss der Tracer mit npm install installiert werden. Zweitens muss ein Logger-Objekt erstellt und die Art der Konsole ausgewählt werden. Anschließend können über das Objekt die verschiedenen Loglevel oder -typen für die weitere Protokollierung angegeben werden.

Benutzerdefinierte Filter können erstellt werden, indem synchrone Funktionen mit der im Funktionshauptteil vorhandenen Geschäftslogik definiert werden. Mikrovorlagen wie tinytim können auch für die Systemprotokollierung verwendet werden.

Kabine.js

Cabin wird für die server- und clientseitige Protokollierung von node.js-Anwendungen verwendet. Es wird dort eingesetzt, wo die Maskierung sensibler und kritischer Informationen erforderlich ist. Dazu gehören Kreditkartennummern, BasicAuth-Header, Salts, Passwörter, CSRF-Token und Bankkontonummern. Das folgende Code-Snippet zeigt die Protokollierung mit Cabin.js.

 const Cabin = require('cabin'); const cabin = new Cabin(); cabin.info('hello world'); cabin.error(new Error('oops!'));

Es besteht aus mehr als 1600 Feldnamen. Es folgt auch dem Prinzip von Bring Your Own Logger (BYOL). Dies macht es mit verschiedenen anderen Loggern wie Axe, Pino, Bunyan, Winston usw. kompatibel. Es reduziert die Speicherkosten auf Festplatten aufgrund automatischer Stream- und Cabin-Puffer. Es ist plattformübergreifend kompatibel und einfach zu debuggen.

Die serverseitige Protokollierung erfordert die Verwendung von Middleware für das Routing und die automatische Ausgabeprotokollierung. Für die browserseitige Protokollierung sind XHR-Anforderungen und -Skripts erforderlich. Es verwendet Ax, das Metadaten anzeigt, dh Daten über Daten, Stacktraces und andere Fehler. SHOW_STACK und SHOW_META sind boolesche Variablen, die auf „true“ oder „false“ gesetzt werden, um Stacktraces und Metadaten anzuzeigen oder auszublenden.

Npmlog

Npmlog ist ein grundlegender Typ von Logger, den npm verwendet. Einige der verwendeten Protokollierungsmethoden sind Level, Record, MaxRecordSize, PrefixStyle, Heading und Stream. Es unterstützt auch farbige Protokollierung. Die verschiedenen Protokollierungsebenen sind albern, ausführlich, info, warnen, http und Fehler. Ein Beispielcodeausschnitt für die Verwendung des npm-Protokolls ist unten dargestellt.

 var log = require('npmlog') // additional stuff ---------------------------+ // message ----------+ | // prefix ----+ | | // level -+ | | | // vvvv log.info('fyi', 'I have a kitty cat: %j', myKittyCat)

Alle Meldungen werden unterdrückt, wenn als Loglevel „Unendlich“ angegeben ist. Wenn als Loglevel „-Infinity“ angegeben ist, muss die Option zum Anzeigen von Logging-Meldungen aktiviert werden, um die Logs zu sehen.

Zur Protokollierung werden Ereignisse und Nachrichtenobjekte verwendet. Präfixmeldungen werden ausgegeben, wenn Präfixereignisse verwendet werden. Stilobjekte werden zum Formatieren der Protokolle verwendet, z. B. Hinzufügen von Farbe zu Text und Hintergrund, Schriftartstil wie Fett, Kursiv, Unterstrichen usw. Einige npm-Protokollpakete sind brolog, npmlogger, npmdate log usw.

Brüllen

Roarr ist ein Logger für Node.js, der keine Initialisierung erfordert und strukturierte Daten erzeugt. Es hat CLI und Umgebungsvariablen. Es ist browserkompatibel. Es kann in Fastify, Fastify, Elastic Search usw. integriert werden. Es kann zwischen Anwendungscode und Abhängigkeitscode unterscheiden. Jede Protokollnachricht besteht aus Kontext, Nachricht, Sequenz, Zeit und Version. Zu den verschiedenen Protokollebenen gehören Trace, Debug, Info, Warn, Error und Fatal. Ein Beispiel-Code-Snippet, wie die Protokollierung in Roarr erfolgt, lautet wie folgt:

 import { ROARR, } from 'roarr'; ROARR.write = (message) => { console.log(JSON.parse(message)); };

Außerdem kann eine Serialisierung von Fehlern durchgeführt werden, was bedeutet, dass die Instanz mit dem Fehler zusammen mit dem Kontext des Objekts protokolliert werden kann. Einige der für Node.js und Roarr spezifischen Umgebungsvariablen sind ROARR_LOG und ROARR_STREAM. „adopt“ ist eine Funktion, die mit node.js verwendet wird, um die Kontexteigenschaften an verschiedene Ebenen weiterzugeben. Untergeordnete Funktionen können während der Protokollierung auch mit Middleware verwendet werden.

Letzte Worte

Die Protokollierung ist eine Methode, um verschiedene Aktivitäten und Ereignisse während der Ausführung eines Programms zu verfolgen. Die Protokollierung spielt eine wichtige Rolle beim Code-Debugging. Es hilft auch bei der Verbesserung der Lesbarkeit des Codes. Node.js ist eine Open-Source-Javascript-Laufzeitumgebung. Einige der besten Node.js-Logger sind Pino, Winston, Bunyan, Signale, Tracer, Npmlog usw. Jeder Loggertyp hat seine eigenen Funktionen wie Profilerstellung, Filterung, Streaming und Transport.

Einige Logger unterstützen farbige Konsolen, andere eignen sich für den Umgang mit vertraulichen Informationen. Detaillierte und formatierte Protokolle helfen Entwicklern am meisten, wenn sie versuchen, Fehler in ihrem Code zu beheben. Das JSON-Format wird im Allgemeinen für die Protokollierung bevorzugt, da es Daten in Form von Schlüssel-Wert-Paaren protokolliert, was es benutzerfreundlicher macht.

Logger können auch in andere Anwendungen integriert werden und sind Multi-Browser-kompatibel. Es ist immer ratsam, sich mit den Anforderungen und Anwendungen zu befassen, die Sie erstellen, bevor Sie den Loggertyp auswählen, den Sie verwenden möchten.

Sie können sich auch ansehen, wie Sie Node.js und NPM unter Windows und macOS installieren.