Node.js-Protokollierungswerkzeuge: Eine detaillierte Analyse und Vergleich
Min-jun Kim
Dev Intern · Leapcell

Detaillierte Analyse und Vergleich von Node.js-Protokollierungswerkzeugen
Im Bereich der Softwareentwicklung ist die Protokollierung eine unverzichtbare und entscheidende Komponente. Durch die sorgfältige Aufzeichnung verschiedener Ereignisse während des Betriebs einer Anwendung liefern Protokolle Entwicklern wertvolle Einblicke, die es ihnen ermöglichen, ein tiefes Verständnis dafür zu gewinnen, wie der Code tatsächlich ausgeführt wird. Dies hilft bei der Fehlersuche, der Leistungsoptimierung und der Problemlösung. Dieser Artikel konzentriert sich auf mehrere gängige Protokollierungswerkzeuge in der Node.js-Umgebung, darunter Bunyan, Winston, Pino, Morgan und npmlog, und führt eine detaillierte Analyse und einen Vergleich ihrer Funktionen, Verwendungsmethoden sowie Vor- und Nachteile durch.
Kernelemente der Protokollierung
Beim Umgang mit Anwendungsprotokollen ist das Verständnis der Protokollebenen ein grundlegender und kritischer Aspekt. Protokollebenen sind ein Standard zur Klassifizierung von Einträgen in einer Protokolldatei nach ihrer Dringlichkeit und Anzeigemethode. Jede Protokollnachricht entspricht einer bestimmten Protokollebene, die die Wichtigkeit und Dringlichkeit der Nachricht widerspiegelt. In Node.js umfassen die gebräuchlichsten Protokollebenen:
- ERROR: Zeigt ein schwerwiegendes Problem an, das sofort behoben werden muss. Normalerweise führen solche Fehler dazu, dass einige Funktionen der Anwendung nicht ordnungsgemäß funktionieren, die Anwendung jedoch möglicherweise weiterhin ausgeführt wird. Wenn beispielsweise eine Datenbankverbindung fehlschlägt und Daten nicht ordnungsgemäß gespeichert werden können, sollte ein Protokoll der Ebene ERROR aufgezeichnet werden.
- INFO: Wird verwendet, um routinemäßige Ereignisse aufzuzeichnen, die aufgetreten sind. Diese Art von Informationen wird normalerweise verwendet, um den normalen Betriebszustand und den Fortschritt der Anwendung anzuzeigen. Beispielsweise können Ereignisse wie die erfolgreiche Anmeldung eines Benutzers am System oder die erfolgreiche Erstellung einer Bestellung auf der Ebene INFO protokolliert werden.
- DEBUG: Enthält detaillierte Informationen, die nur während der Debugging-Phase nützlich sind und in einer Produktionsumgebung möglicherweise weniger Wert haben. Während der Entwicklung hilft das Aufzeichnen von Informationen wie der Übergabe von Funktionsparametern und Variablenwertänderungen Entwicklern beispielsweise, Probleme mit der Codelogik zu lokalisieren.
- WARN: Weist auf eine potenziell schädliche Situation hin. Obwohl dies derzeit keinen schwerwiegenden Fehler verursacht, kann dies in Zukunft zu Problemen führen. Wenn sich Systemressourcen beispielsweise dem kritischen Wert nähern oder in der Konfigurationsdatei inkompatible Einstellungen vorhanden sind, sollte ein Protokoll der Ebene WARN aufgezeichnet werden.
- FATAL: Weist auf ein äußerst schwerwiegendes Fehlerereignis hin, von dem erwartet wird, dass es zum sofortigen Beenden der Anwendung führt. Situationen wie die Erschöpfung des Systemspeichers oder der Absturz eines kritischen Prozesses erfordern eine Aufzeichnung auf der Ebene FATAL.
Detaillierte Erläuterung der Node.js-Protokollierungsbibliotheken
Bunyan
Bunyan ist ein beliebtes Protokollierungswerkzeug im Node.js-Ökosystem. Es handelt sich um eine einfache und effiziente JSON-Protokollierungsbibliothek, die auch eine gut aussehende CLI-Ansicht der Protokolle bietet. Verschiedene Protokollebenen werden durch unterschiedliche Farben unterschieden, sodass Entwickler sie schnell identifizieren und anzeigen können. Stand 28. April 2025 hat es 7.200 Sterne und 522 Issues auf GitHub.
Installation
Führen Sie den folgenden Befehl im Terminal aus, um Bunyan zu installieren:
npm i bunyan
Verwendung
- Erstellen Sie eine Datei namens
test.js
und importieren Sie die Bunyan-Bibliothek:
const bunyan = require('bunyan');
- Verwenden Sie die Methode
createLogger
, um eine Logger-Instanz zu definieren:
var log = bunyan.createLogger({ name: 'leapcell-test', stream: process.stdout });
- Verwenden Sie den Logger, um Daten aufzuzeichnen:
log.info('hi');
Nachdem Sie die Datei test.js
ausgeführt haben, erhalten Sie in der Konsole eine Ausgabe ähnlich der folgenden:
{"name":"leapcell-test","hostname":"your_hostname","pid":xxxx,"level":30,"msg":"hi","time":"2025-04-28Txx:xx:xx.xxxZ","v":0}
Es ist ersichtlich, dass die von Bunyan generierten Protokolle im JSON-Format vorliegen und jedes Protokoll wichtige Informationen wie den Zeitpunkt des Auftretens des Protokolls enthält. In praktischen Anwendungen werden diese Protokolle normalerweise in einer Datei zur späteren Bezugnahme und Analyse gespeichert.
Vorteile
- Multi-Runtime-Unterstützung: Neben Node.js unterstützt es auch mehrere Laufzeitumgebungen wie Webpack, Browserify und NW.js.
- Serialisierungsmechanismus: Es hat das Konzept der Serialisierung und kann JavaScript-Objekte in JSON-Serialisierbare Objekte konvertieren. Eine bestimmte Logger-Instanz kann Protokolldatensatzfeldnamen über
serializer
Serialisierungsfunktionen zuordnen. - Sub-Log-Funktion: Entwickler können dedizierte Logger für Unterkomponenten der Anwendung erstellen und zusätzliche Bindungsfelder in die Protokolldatensätze aufnehmen, was für eine detaillierte Protokollverwaltung bestimmter Module praktisch ist.
Winston
Winston ist eine der Top-Protokollierungsbibliotheken im Node.js-Bereich. Mit seiner großen und aktiven Community und den umfangreichen Funktionen hat es 23.500 Sterne und 1.600 Issues auf GitHub erhalten. Durch die Entkopplung von Protokollierungsfunktionen und eine große Anzahl von Konfigurationsoptionen erreicht es ein hohes Maß an Erweiterbarkeit und Flexibilität, sodass Entwickler problemlos verschiedene komplexe Protokollierungsanforderungen erfüllen können.
Installation
Führen Sie den folgenden Befehl im Terminal aus, um Winston zu installieren:
npm i winston
Verwendung
- Importieren Sie die Winston-Bibliothek in der Stammdatei und erstellen Sie eine Logger-Instanz:
const winston = require('winston'); const logger = winston.createLogger({});
- Nehmen Sie über die Methode
createLogger
umfangreiche Konfigurationen vor, z. B. das Festlegen der Protokollebene, des Formats und der Metabeschreibung:
const logger = winston.createLogger({ level: 'info', format: winston.format.json(), defaultMeta: { service: 'leapcell-test' }, });
- Sie können angeben, dass Protokolle über das Array
transports
in Dateien geschrieben werden sollen:
const logger = winston.createLogger({ level: 'info', format: winston.format.json(), defaultMeta: { service: 'leapcell-test' }, transports: [ new winston.transports.File({ filename: 'error.log', level: 'error' }), new winston.transports.File({ filename: 'combined.log' }), ], });
Die obige Konfiguration bedeutet, dass alle Protokolle der Ebene „error“ in die Datei error.log
und andere Protokolle in die Datei combined.log
geschrieben werden. Darüber hinaus können Sie auch festlegen, dass Protokolle nur in der Konsole angezeigt werden, indem Sie winston.transports.Console()
zum Array transports
hinzufügen.
Vorteile
- Cloud-Protokollintegration: Es unterstützt das Senden von Protokollen an Cloud-Protokollierungsdienste wie logz.io und AWS Cloudwatch. Verglichen mit herkömmlicher statischer Dateispeicherung oder Konsolenaufzeichnung bietet es leistungsfähigere Protokollverwaltungs- und Analysefunktionen.
- Bequemes Tracing: Jedes Protokoll enthält einen Zeitstempel und eine Protokollebene, wodurch Entwickler Probleme schnell anhand spezifischer Situationen verfolgen und lokalisieren können.
Pino
Pino ist für seinen „extrem geringen Overhead“ bekannt und ein effizienter Node.js-Logger. Es erreicht eine schnelle Protokollierung, indem es den Ressourcenverbrauch minimiert. Im Laufe der Zeit nehmen die aufgezeichneten Informationen immer weiter zu, haben aber keine wesentlichen Auswirkungen auf die Anwendungsleistung. Beispielsweise führt dies nicht zu einer starken Verringerung der Anzahl der Anfragen pro Sekunde. Stand 28. April 2025 hat es 15.300 Sterne und 530 Issues auf GitHub.
Installation
Führen Sie den folgenden Befehl im Terminal aus, um Pino zu installieren:
npm i pino
Verwendung
Die Verwendung von Pino ist sehr einfach und unkompliziert. Sie müssen lediglich die Bibliothek importieren und initialisieren:
const logger = require('pino')(); logger.info('hello world');
Nachdem Sie das obige Skript ausgeführt haben, erhalten Sie in der Konsole eine Ausgabe ähnlich der folgenden:
{"level":30,"time":xxxxxxx,"msg":"hello world","pid":xxxx,"hostname":"your_hostname"}
Die Ausgabeprotokolldaten enthalten die Protokollebene, die Aufzeichnungszeit, die tatsächlichen Protokollinformationen, die Prozess-ID und den Hostnamen.
Verwendung in Express.js
- Installieren Sie das Paket
pino-http
:
npm install pino-http
- Verwenden Sie es in einer Express.js-Anwendung:
const express = require('express'); const pino = require('pino-http'); const app = express(); const pinoInstance = pino(); app.use(pinoInstance); app.post('/do-stuff', (req, res) => { req.log.info('Something done'); res.send('Say hello to Pino'); }); app.listen(5500);
Vorteile
- Formatierungstool: Es bietet das Modul
pino-pretty
, ein Formatierer, der auf Newline Delimited JSON (NDJSON) basiert. NDJSON ist ein effizientes strukturiertes Datenspeicherungs- und Streaming-Format, mit dem Datensätze einzeln verarbeitet werden können.pino-pretty
führt basierend auf der Protokollebene, dem Zeitstempel und anderen Informationen eine zusätzliche Formatierung der Protokolldaten durch, wodurch die Protokolle besser lesbar werden. Sie können es global übernpm install -g pino-pretty
installieren und die Anwendung dann mit dem Befehlnode app.js | pino-pretty
ausführen, um die Protokolle in einem formatierten Format anzuzeigen.
Morgan
Morgan ist eine Node.js-Bibliothek, die speziell für die Aufzeichnung von HTTP-Anfragen entwickelt wurde. Es wird normalerweise als Middleware in Web-Frameworks wie Express.js integriert, um die Verfolgung aller HTTP-Anfragen zu ermöglichen. Im Gegensatz zu anderen Allzweck-Protokollierungswerkzeugen konzentriert es sich auf die HTTP-Anforderungsprotokollierung. Derzeit hat es 8.000 Sterne und 485 Issues auf GitHub.
Installation
Führen Sie den folgenden Befehl im Terminal aus, um Morgan zu installieren:
npm i morgan
Verwendung
- Importieren Sie die Morgan-Bibliothek und fügen Sie sie als Express.js-Middleware hinzu:
var morgan = require('morgan'); app.use(morgan('dev'));
Hier ist dev
eines der Protokollformate von Morgan. Morgan hat insgesamt fünf Protokollformate implementiert:
- combined: Verwendet das kombinierte Standard-Apache-Protokollausgabeformat.
- common: Verwendet auch das kombinierte Standard-Apache-Protokollausgabeformat.
- dev: Ein prägnantes Ausgabeformat, das den Antwortstatus in verschiedenen Farben anzeigt und sich für die Entwicklungsumgebung eignet.
- short: Enthält die Antwortzeit und vereinfacht standardmäßig die Protokolle.
- tiny: Verwendet ein minimiertes Ausgabeformat.
- Sie können je nach Bedarf verschiedene Formate für die Konfiguration auswählen:
app.use(morgan('combined')); app.use(morgan('common')); app.use(morgan('dev')); app.use(morgan('short')); app.use(morgan('tiny'));
Vorteile
Es bietet eine Vielzahl vordefinierter Protokollformate. Entwickler können schnell das geeignete Format entsprechend den Projektanforderungen und Anwendungsszenarien auswählen, ohne komplexe Konfigurationscode zu schreiben, was die Entwicklungszeit erheblich verkürzt.
npmlog
npmlog ist das Protokollierungswerkzeug, das offiziell von npm verwendet wird. Ähnlich wie andere Node.js-Protokollierungsbibliotheken unterstützt es benutzerdefinierte Protokollebenen, farbige Ausgabe und ermöglicht Entwicklern, personalisierte Farben für verschiedene Protokollebenen festzulegen. Es hat 458 Sterne und 55 Issues auf GitHub.
Installation
Führen Sie den folgenden Befehl im Terminal aus, um npmlog zu installieren:
npm i npmlog
Verwendung
- Erstellen Sie eine Testdatei und importieren Sie das npmlog-Paket:
const log = require('npmlog'); log.info('hello leapcell', 'Hello from logrocket', {'message': 'test'});
Die Methode log.info
kann bis zu drei Parameter akzeptieren, nämlich das Protokollpräfix, die tatsächlichen Protokollinformationen und die zusätzlichen Daten.
Vorteile
Es verfügt über eine Vielzahl von Methoden, z. B. zum Festlegen der Protokollheader, des Titelstils und zum Definieren von Protokollebenen, die protokollbezogene Vorgänge während der Entwicklung vereinfachen und die Entwicklungseffizienz verbessern können.
Statistische Vergleich von Node.js-Protokollierungsbibliotheken
Bibliotheksname | GitHub-Sterne | GitHub-Problemanzahl | Hauptmerkmale und anwendbare Szenarien |
---|---|---|---|
Bunyan | 7.2k | 522 | JSON-formatierte Protokolle, Unterstützung für mehrere Laufzeiten, geeignet für Projekte mit hohen Anforderungen an die Protokollstrukturierung und die umgebungsübergreifende Nutzung |
Winston | 23.5k | 1.6k | Hochgradig erweiterbar und flexibel, unterstützt Cloud-Protokollierungsdienste, geeignet für komplexe Anwendungen und Szenarien mit vielfältigen Protokollverwaltungsanforderungen |
Pino | 15.3k | 530 | Geringer Overhead, geeignet für Node.js-Anwendungen mit extrem hohen Leistungsanforderungen und großen Protokollmengen |
Morgan | 8k | 485 | Konzentriert sich auf die Protokollierung von HTTP-Anfragen, geeignet für Webanwendungen und API-Dienste, praktisch für die Anfrageverfolgung und -analyse |
npmlog | 458 | 55 | Das offizielle npm-Protokollierungstool, geeignet für npm-bezogene Projekte und Szenarien mit einfachen Anforderungen an die Protokollierungsfunktion |
Schlussfolgerung
Die umfangreichen Protokollierungswerkzeuge im Node.js-Ökosystem bieten Entwicklern eine Vielzahl von Auswahlmöglichkeiten und erleichtern die Implementierung von Protokollierungsfunktionen in tatsächlichen Projekten. Die Wahl der richtigen Protokollierungsbibliothek ist jedoch von entscheidender Bedeutung. Es ist notwendig, Faktoren wie die spezifischen Anforderungen der Anwendung, die Leistungsanforderungen, die Bereitstellungsumgebung und die Komplexität der Protokollverwaltung umfassend zu berücksichtigen. Entwickler sollten ein Protokollierungswerkzeug auswählen, das die erforderlichen Daten genau aufzeichnen kann, einfach zu analysieren ist und Probleme behebt und gleichzeitig keinen zu großen Einfluss auf die Anwendungsleistung hat, um den stabilen Betrieb und die kontinuierliche Optimierung des Projekts umfassend zu unterstützen.
Leapcell: Das Beste von Serverless Web Hosting
Schließlich empfehle ich eine Plattform, die sich am besten für die Bereitstellung von Node.js-Diensten eignet: Leapcell
🚀 Erstellen Sie mit Ihrer Lieblingssprache
Entwickeln Sie mühelos in JavaScript, Python, Go oder Rust.
🌍 Stellen Sie unbegrenzt viele Projekte kostenlos bereit
Zahlen Sie nur für das, was Sie verbrauchen – keine Anfragen, keine Gebühren.
⚡ Pay-as-You-Go, keine versteckten Kosten
Keine Leerlaufgebühren, nur nahtlose Skalierbarkeit.
📖 Entdecken Sie unsere Dokumentation
🔹 Folgen Sie uns auf Twitter: @LeapcellHQ