Haben Sie Probleme mit der Fehlersuche in Ihrem Code? Suchen Sie nach Lösungen für die Protokollierung, die Ihnen das Debuggen erleichtern könnten? Lesen Sie weiter, um mehr zu erfahren.
Die Softwareentwicklung durchläuft mehrere Phasen: Anforderungserfassung, Analyse, Codierung, Testen und Wartung. Von all diesen Phasen erfordert die Kodierungs-/Entwicklungsphase viel Zeit und Mühe. Softwareingenieure haben es mit Syntaxfehlern, logischen Fehlern und Laufzeitfehlern zu tun. Syntaktische Fehler werden bei der Kompilierung erkannt und treten auf, wenn der Code nicht den Regeln einer Programmiersprache entspricht.

Logische Fehler und Laufzeitfehler hingegen können von der Integrierten Entwicklungsumgebung (IDE) nicht erkannt werden und sind oft schwer zu beheben und zu beseitigen. Die Behebung von Fehlern ist ein zeitaufwändiger Prozess und erfordert viel Debugging.
Debugging ist ein Prozess, bei dem man versucht 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 für die Fehlersuche im Code sehr nützlich.
Was ist Logging?
Logging ist eine Technik, bei der Meldungen während der Ausführung eines Programms aufgezeichnet werden. Es werden nur die Meldungen protokolliert, die bei der Fehlersuche hilfreich sein können. Es ist auch äußerst wichtig zu wissen, wann man Protokollanweisungen in den Code einfügt. Ebenso wichtig ist es, zwischen den einzelnen Protokollanweisungen zu unterscheiden. Bei der Protokollierung gibt es verschiedene Stufen, z.B. Info, Warnung, Fehler, Debug und Ausführlich. Fehler- und Warnanweisungen werden für die Behandlung von Ausnahmen verwendet.

Daten, die von Funktionen zurückgegeben werden, Ergebnisse nach Array-Manipulationen, von APIs abgerufene Daten usw. sind einige Beispiele für Daten, die mit info-Anweisungen protokolliert werden können. Die Debug- und Verbose-Protokolle werden verwendet, um eine detaillierte Beschreibung der Fehler zu geben.
Das Debug-Protokoll enthält Informationen über den Stack-Trace, Eingabe-/Ausgabeparameter usw. "Verbose" ist nicht so detailliert wie das "Debug"-Protokoll, enthält aber eine Liste aller aufgetretenen Ereignisse. Die Protokolle werden auf der Konsole, in Dateien und im Ausgabestrom ausgegeben. Für eine strukturierte und formatierte Protokollierung können Protokollverwaltungstools verwendet werden.
Node.js Protokollierung
Nodejs ist eine Javascript-Laufzeitumgebung. Node.js-Anwendungen sind asynchron und nicht blockierend und werden in datenintensiven und Echtzeitsystemen eingesetzt. Der beste Weg, mehr über Node.js zu erfahren, sind die Node.js-Tutorials und die dazugehörigen Dokumentation. Die Protokollierung ist für die Verbesserung der Leistung, die Fehlersuche und die Fehlerverfolgung erforderlich. Die Protokollierung in Node.js kann mit der eingebauten Funktion console.log erfolgen. Auch die Debug-Funktion ist mit mehreren Paketen verknüpft und kann effektiv genutzt werden.
Middleware wird für die Verwaltung von Anfragen und Antworten verwendet. Die Middleware kann eine Anwendung oder ein anderes Javascript-Framework sein. Die Protokollierung in der Middleware kann über Anwendungen und Router erfolgen. Jeder Node.js-Logger muss mit dem Befehl npm oder yarn install installiert werden, um die Logger zu installieren.
Npm steht für "Node Package Manager", und YARN steht für "Yet Another Resource Negotiator". Yarn wird jedoch gegenüber npm bevorzugt, da es schneller ist und die Pakete parallel installiert werden.

Einige der besten Node.js Logger sind unten aufgeführt:
Pino
Pino ist eine Bibliothek, die zu den besten Loggern für Node.js-Anwendungen gehört. Sie ist Open Source, extrem schnell und protokolliert die Anweisungen in einem leicht lesbaren JSON-Format. Einige der Pino-Protokollebenen sind - Debug-, Warn-, Fehler- und Infomeldungen. Eine Pino Logger-Instanz kann in das Projekt importiert werden, und die console.log-Anweisungen müssen durch logger.info-Anweisungen ersetzt werden.
Verwenden Sie den folgenden Befehl, um Pino zu installieren:
$ npm install pino
Die erzeugten Protokolle sind ausführlich und im JSON-Format, wobei die Zeilennummer des Protokolls, die Art des Protokolls, die Zeit, zu der es protokolliert wurde, usw. hervorgehoben werden. Pino verursacht nur minimalen Overhead bei der Protokollierung in einer Anwendung und ist bei der Verarbeitung von Protokollen äußerst flexibel.
Pino kann mit Web-Frameworks wie Hapi, Restify, Express usw. integriert werden. Die von Pino erzeugten 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, wobei sein Hauptaugenmerk auf Flexibilität und Erweiterbarkeit liegt. Es unterstützt mehrere Arten von Transporten und kann Protokolle an verschiedenen Dateispeicherorten speichern. Transporte sind Orte, an denen die Protokollnachrichten gespeichert werden.
Neben einigen integrierten Transporten wie Http, Console, File und Stream unterstützt es auch andere Transporte wie Cloud watch und MongoDB. Es führt die Protokollierung in verschiedenen Stufen und Formaten durch. Die Protokollierungsstufen geben den Schweregrad des Problems an.
Die verschiedenen Protokollierungsstufen sind im Folgenden dargestellt:
{
error: 0,
warn: 1,
info: 2,
http: 3,
verbose: 4,
debug: 5,
silly: 6
}
Das Ausgabeformat der Protokolle kann angepasst, gefiltert und auch kombiniert werden. Die Protokolle enthalten Informationen über den Zeitstempel, die mit einem Protokoll verknüpften Bezeichnungen, die seit dem letzten Protokoll verstrichenen Millisekunden usw.
Winston behandelt auch Ausnahmen und nicht abgefangene Versprechen. Es bietet zusätzliche Funktionen wie die Ablage von Abfragen zur Laufzeit, Streaming-Protokolle usw. Zunächst müssen Sie Winston installieren. Dann wird ein Winston-Konfigurationsobjekt zusammen mit dem Transport für die Speicherung des Protokolls erstellt. Mit der Funktion createLogger() wird ein Logger-Objekt erstellt, an das die Protokollnachricht übergeben wird.
Node-Bunyan
Bunyan wird für die schnelle Protokollierung 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 mit der Pretty-Printing-Funktion weiter verschönert. Protokolle haben verschiedene Stufen wie fatal, error, warn, info, debug und trace; jede Stufe ist mit einem numerischen Wert verbunden.

Alle Stufen oberhalb der für die Instanz festgelegten Stufe werden protokolliert. Der 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 für die Definition eines Streams wird unten gezeigt:
var bunyan = require('bunyan');
var log = bunyan.createLogger({
name: "foo",
streams: [
{
stream: process.stderr,
level: "debug"
},
...
]
});
Bunyan unterstützt auch die DTrace-Protokollierung. Zu den an der DTrace-Protokollierung beteiligten Sonden gehören log-trace, log-warn, log-error, log-info, log-debug und log-fatal. Bunyan verwendet Serializer, um die Protokolle im JSON-Format zu erstellen. Serializer-Funktionen lösen keine Ausnahmen aus und sind defensiv.
Loglevel
Loglevel wird für die Protokollierung in Javascript-Anwendungen verwendet. Es ist auch einer der besten Logger von Node.js, da es leichtgewichtig und einfach ist. Er protokolliert den angegebenen Level und verwendet eine einzige Datei ohne Abhängigkeiten für die Protokollierung. Die Standardprotokollebene ist "warn" Die Protokollausgaben sind gut formatiert und mit Zeilennummern versehen. Einige der für die Protokollierung verwendeten Methoden sind trace, debug, warn, error und info.
Sie sind in jeder Umgebung fehlerresistent. getLogger() ist die Methode, mit der das Logger-Objekt abgerufen werden kann. Es kann auch mit anderen Plugins kombiniert werden, um seine Funktionen zu erweitern. Einige der Plugins sind loglevel-plugin-prefix, loglevel-plugin-remote, ServerSend und DEBUG. Das Plugin zum Hinzufügen von Präfix-Meldungen zur Protokollierung wird im Folgenden gezeigt:
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()); // Stellen Sie sicher, dass Sie die setLevel-Methode aufrufen, um das Plugin anzuwenden
Die Builds werden mit dem Befehl npm run dist ausgeführt, und die Tests können mit dem Befehl npm test ausgeführt werden. Loglevel 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 Scoped Logging. Es besteht aus Timern, die bei der Protokollierung des Zeitstempels, der Daten und des Dateinamens helfen. Neben den 19 Loggern wie await, complete, fatal, fav, info usw. können Sie auch benutzerdefinierte Logs erstellen.
Benutzerdefinierte Protokolle werden erstellt, indem Sie ein JSON-Objekt und Felder mit den Logger-Daten definieren. Es können auch interaktive Logger erstellt werden. Wenn ein interaktiver Logger auf true gesetzt ist, überschreiben neue Werte aus interaktiven Loggern die alten.

Der beste Teil von Signalen ist die Möglichkeit, geheime oder sensible Informationen herauszufiltern. Mehrere Geheimnisse werden in einem Array gespeichert. addSecrets() und clearSecrets() sind die Funktionen zum Hinzufügen und Löschen der Geheimnisse aus dem Array. Boostnote, Docz, Shower, Taskbook und Vant verwenden Signale für die Protokollierung. Die Syntax für den Aufruf von APIs aus Signalen lautet wie folgt:
signale.<logger>(nachricht[,nachricht]|nachrichtObj|fehlerObj)
Die Anzahl der Downloads von Signale liegt zum Zeitpunkt der Erstellung dieses Artikels bei über 1 Million.
Tracer
Tracer wird für die Erstellung detaillierter Protokollnachrichten verwendet. Die Protokollierungsmeldungen bestehen aus Zeitstempeln, Dateinamen, Zeilennummern und Methodennamen. Es können Hilfspakete installiert werden, um das Format der Ausgabeprotokolle anzupassen. Die Hilfspakete können mit dem folgenden Befehl installiert werden.
npm install -dev tracer
Tracer unterstützt den Datei-, Stream- und MongoDB-Transport. Er unterstützt Farbkonsolen und Filterbedingungen in der Protokollierung. Zunächst muss der Tracer mit npm install installiert werden. Anschließend müssen Sie ein Logger-Objekt erstellen und die Art der Konsole auswählen. Dann können die verschiedenen Protokollierungsebenen oder -typen über das Objekt für die weitere Protokollierung festgelegt werden.
Benutzerdefinierte Filter können durch die Definition synchroner Funktionen mit der Geschäftslogik im Funktionskörper erstellt werden. Micro-Templates wie tinytim können auch für die Systemprotokollierung verwendet werden.
Hütte.js
Kabine wird für die server- und clientseitige Protokollierung von node.js-Anwendungen verwendet. Es wird verwendet, wenn sensible und kritische Informationen maskiert werden müssen. Dazu gehören Kreditkartennummern, BasicAuth Header, Salts, Passwörter, CSRF-Tokens und Bankkontonummern. Der folgende Codeausschnitt 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. Außerdem folgt es dem Prinzip des Bring Your Own Logger (BYOL). Dadurch ist es mit verschiedenen anderen Loggern wie Axe, Pino, Bunyan, Winston usw. kompatibel. Es reduziert die Speicherkosten auf den Festplatten durch automatische Stream- und Cabin-Puffer. Es ist plattformübergreifend kompatibel und leicht 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-Anfragen und Skripte erforderlich. Es verwendet Axe, das Metadaten anzeigt, z.B. Daten über Daten, Stack Traces und andere Fehler. SHOW_STACK und SHOW_META sind boolesche Variablen, die auf true oder false gesetzt werden, um Stack Traces und Metadaten anzuzeigen oder zu verbergen.
Npmlog
Npmlog ist ein grundlegender Typ eines Loggers, den npm verwendet. Einige der verwendeten Protokollierungsmethoden sind level, record, maxRecordSize, prefixStyle, heading und stream. Es unterstützt auch farbige Protokollierung. Die verschiedenen Protokollierungsstufen sind silly, verbose, info, warn, http und error. Nachfolgend finden Sie einen Beispielcode für die Verwendung von npm log.
var log = require('npmlog')
// zusätzliches Zeug ---------------------------
// Nachricht ---------- |
// Präfix ---- | |
// Level - | | |
// v v v
log.info('fyi', 'Ich habe eine Miezekatze: %j', myKittyCat)
Alle Meldungen werden unterdrückt, wenn als Protokollierungsstufe "Infinity" angegeben ist. Wenn "-Infinity" als Protokollierungsstufe angegeben ist, muss die Option zum Anzeigen von Protokollierungsmeldungen aktiviert sein, um die Protokolle zu sehen.
Ereignisse und Nachrichtenobjekte werden für die Protokollierung verwendet. Präfix-Meldungen werden ausgegeben, wenn Präfix-Ereignisse verwendet werden. Style-Objekte werden für die Formatierung der Protokolle verwendet, z.B. für das Hinzufügen von Farben zu Text und Hintergrund, Schriftarten wie fett, kursiv, unterstrichen, usw. Einige npm Log-Pakete sind brolog, npmlogger, npmdate log, usw.
Roarr
Roarr ist ein Logger für Node.js, der keine Initialisierung erfordert und strukturierte Daten erzeugt. Er verfügt über CLI- und Umgebungsvariablen. Er ist browserfähig. Er kann mit Fastify, Fastify, Elastic Search usw. integriert werden. Er kann zwischen Anwendungscode und Abhängigkeitscode unterscheiden. Jede Protokollnachricht besteht aus einem Kontext, einer Nachricht, einer Sequenz, einer Zeit und einer Version. Zu den verschiedenen Protokollebenen gehören trace, debug, info, warn, error und fatal. Im Folgenden finden Sie einen Beispielcode, der zeigt, wie die Protokollierung in Roarr durchgeführt wird:
import {
ROARR,
} from 'roarr';
ROARR.write = (message) => {
console.log(JSON.parse(message));
};
Auch die Serialisierung von Fehlern ist möglich, d.h. die Instanz mit dem Fehler kann zusammen mit dem Kontext des Objekts protokolliert werden. Einige der Umgebungsvariablen, die spezifisch für Node.js und Roarr sind, sind ROARR_LOG und ROARR_STREAM. "adopt" ist eine Funktion, die mit Node.js verwendet wird, um die Kontexteigenschaften an verschiedene Ebenen weiterzugeben. Child-Funktionen können auch mit Middleware verwendet werden, während der Protokollierung.
Letzte Worte
Logging ist eine Methode, um verschiedene Aktivitäten und Ereignisse während der Ausführung eines Programms zu protokollieren. Die Protokollierung spielt eine wichtige Rolle beim Debuggen von Code. Außerdem trägt es dazu bei, die Lesbarkeit des Codes zu verbessern. Node.js ist eine Open-Source-Javascript-Laufzeitumgebung. Einige der besten Node.js Logger sind Pino, Winston, Bunyan, Signale, Tracer, Npmlog, usw. Jede Art von Logger hat ihre eigenen Funktionen wie Profiling, Filterung, Streaming und Transport.
Einige Logger unterstützen farbige Konsolen und einige sind für den Umgang mit sensiblen Informationen geeignet. 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 und somit benutzerfreundlich ist.
Logger können auch in andere Anwendungen integriert werden und sind mit mehreren Browsern kompatibel. Es ist immer ratsam, sich mit den Anforderungen und Anwendungen, die Sie erstellen, zu befassen, bevor Sie sich für einen Logger-Typ entscheiden, den Sie verwenden möchten.
Sie können sich auch ansehen, wie Sie Node.js und NPM für Windows und macOS installieren.