Maison > Article > interface Web > Résumé de l'utilisation du module de journalisation nodejs Winston
Cette fois, je vais vous apporter un résumé de la façon d'utiliser le module de journal nodejs winston. Quelles sont les précautions lors de l'utilisation du module de journal nodejs winston. Ce qui suit est un cas pratique, jetons un coup d'œil. .
Module de journal Winston
Lorsque vous utilisez le module Winston de nodejs, plus les deux modules associés, vous pouvez obtenir deux fois le résultat avec la moitié de l'effort.
express-winston
winston-daily-rotate-file
express -winston
est une version améliorée de winston d'express-winston. Il est utilisé comme middleware d'express pour imprimer les journaux, non seulement avec les informations d'en-tête de demande, mais également avec le temps de réponse.
En tant que middleware, pourquoi y a-t-il un temps de réponse ? Étant donné qu'express-winston a réécrit la méthode res.end d'express, le journal est généré une fois la requête terminée.
Extrait de code
var end = res.end; res.end = function(chunk, encoding) { res.responseTime = (new Date) - req._startTime; res.end = end; res.end(chunk, encoding); ... }
express-winston ne modifie ni n'étend le transport de Winston, et winston-daily-rotate-file améliore simplement la méthode de transport de Winston
winston-daily-rotate-file
winston-daily-rotate-file est une extension de Winston, qui ajoute une méthode de transport pour donner à Winston la possibilité de faire rouler des journaux.
Utilisé en conjonction avec
, nous avons une exigence : Comment faire en sorte qu'express-winston imprime le journal et également les paramètres de requête de l'interface /api et données de réponse ?
Le middleware de journalisation doit être derrière l'API de la chaîne d'appels et avant le traitement commercial api/*. comme : app.use('/api', apiRequestLogger, apiHandler)
Pour obtenir les données de réponse, vous devez les envoyer une fois l'entreprise traitée avant qu'elle puisse être capturée. All express La réponse finale à la demande est res.send. Nous pouvons commencer à capturer les données de réponse à partir d'ici
Le code est le suivant
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) }
Je vous crois. J'ai maîtrisé la méthode après avoir lu le cas dans cet article , pour un contenu plus passionnant, veuillez faire attention aux autres articles connexes sur le site Web chinois de php !
Lecture recommandée :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!