Heim > Artikel > Web-Frontend > So verwenden Sie das NodeJS-Protokollierungsmodul Winston
Dieses Mal zeige ich Ihnen, wie Sie das NodeJS-Protokollmodul Winston verwenden. Was sind die Vorsichtsmaßnahmen bei der Verwendung des NodeJS-Protokollmoduls Winston?
Winston-Protokollmodul
Wenn Sie das NodeJS-Winston-Modul und die beiden zugehörigen Module verwenden, können Sie mit halbem Aufwand das Doppelte des Ergebnisses erzielen.
Express-Winston
Winston-Daily-Rotate-File
Express -winston
ist eine erweiterte Version von Express-Winston. Es wird als Middleware von Express zum Drucken von Protokollen verwendet, nicht nur mit Anforderungsheaderinformationen, sondern auch mit Antwortzeit.
Warum gibt es als Middleware eine Reaktionszeit? Da express-winston die res.end-Methode von express neu schreibt, wird das Protokoll nach Abschluss der Anforderung generiert.
Code-Snippet
var end = res.end; res.end = function(chunk, encoding) { res.responseTime = (new Date) - req._startTime; res.end = end; res.end(chunk, encoding); ... }
express-winston ändert oder erweitert den Transport von Winston nicht, und winston-daily-rotate-file verbessert lediglich die Transportmethode von Winston
winston- daily-rotate-file
winston-daily-rotate-file ist eine Erweiterung von Winston, die eine Transportmethode hinzufügt, um Winston die Möglichkeit zu geben, Protokolle zu rollen.
In Verbindung mit
haben wir eine Anforderung: Wie kann express-winston das Protokoll drucken und auch die Anforderungsparameter der Schnittstelle ausdrucken? /api und Antwortdaten?
Die Protokoll-Middleware sollte sich hinter der Aufrufketten-API und vor der Geschäftsverarbeitung api/* befinden. wie: app.use('/api', apiRequestLogger, apiHandler)
Um die Antwortdaten zu erhalten, müssen Sie sie nach der Geschäftsverarbeitung versenden, bevor sie erfasst werden können. Alle Express Die endgültige Antwort auf die Anfrage ist res.send. Von hier aus können wir mit der Erfassung der Antwortdaten beginnen
Der Code lautet wie folgt
import winston from 'winston' import expressWinston from 'express-winston' import 'winston-daily-rotate-file' import path from 'path' export let DailyRotateFileTransport = (fileName) => { return new (winston.transports.DailyRotateFile)({ filename: path.join(process.env.LOGPATH, `${fileName}-%DATE%.log`), datePattern: 'YYYY-MM-DD-HH', // maxSize: '20m', maxFiles: '7d', timestamp: () => new Date().format('yyyy-MM-dd hh:mm:ss.S') }) } export let pageRequestLogger = expressWinston.logger({ transports: [ DailyRotateFileTransport('page-request') ], meta: true, // optional: control whether you want to log the meta data about the request (default to true) msg: 'HTTP {{req.method}} {{req.url}}', // optional: customize the default logging message. E.g. "{{res.statusCode}} {{req.method}} {{res.responseTime}}ms {{req.url}}" expressFormat: true, // Use the default Express/morgan request formatting. Enabling this will override any msg if true. Will only output colors with colorize set to true colorize: false, // Color the text and status code, using the Express/morgan color palette (text: gray, status: default green, 3XX cyan, 4XX yellow, 5XX red). ignoreRoute: function (req, res) { // 只打印页面请求信息 let notPageRequest = false let ignoreArr = ['/api', '.js', '.css', '.png', '.jpg', '.gif'] ignoreArr.forEach(item => { if (req.url.indexOf(item) > -1) notPageRequest = true }) return notPageRequest } // optional: allows to skip some log messages based on request and/or response }) export let apiRequestLogger = (req, res, next) => { let send = res.send let content = '' let query = req.query || {} let body = req.body || {} res.send = function () { content = arguments[0] send.apply(res, arguments) } expressWinston.logger({ transports: [ DailyRotateFileTransport('api-request') ], meta: true, // optional: control whether you want to log the meta data about the request (default to true) msg () { return `HTTP ${req.method} ${req.url} query ${JSON.stringify(query)} body ${JSON.stringify(body)} resData ${content} ` }, colorize: true, // Color the text and status code, using the Express/morgan color palette (text: gray, status: default green, 3XX cyan, 4XX yellow, 5XX red). ignoreRoute: function (req, res) { if (req.headers.self) return true return false } // optional: allows to skip some log messages based on request and/or response })(req, res, next) }
Ich glaube, Sie haben es gemeistert Nachdem Sie den Fall in diesem Artikel gelesen haben, erfahren Sie mehr über die Methode. Wie aufregend, achten Sie bitte auf andere verwandte Artikel auf der chinesischen PHP-Website!
Empfohlene Lektüre:
JS +HTML5 echte Mausbindung Partikelanimation von Ereignissen
Das obige ist der detaillierte Inhalt vonSo verwenden Sie das NodeJS-Protokollierungsmodul Winston. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!