Heim  >  Artikel  >  Web-Frontend  >  So verwenden Sie das NodeJS-Protokollierungsmodul Winston

So verwenden Sie das NodeJS-Protokollierungsmodul Winston

php中世界最好的语言
php中世界最好的语言Original
2018-06-01 11:45:551428Durchsuche

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.

  1. Express-Winston

  2. 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?

  1. Die Protokoll-Middleware sollte sich hinter der Aufrufketten-API und vor der Geschäftsverarbeitung api/* befinden. wie: app.use('/api', apiRequestLogger, apiHandler)

  2. 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:

Eine Zusammenfassung der Methode zur Verwendung von JS zur Bestimmung des in einer Zeichenfolge enthaltenen Inhalts

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn