国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > JS > 正文

nodejs 日志模塊winston的使用方法

2024-05-06 16:44:02
字體:
供稿:網(wǎng)友

winston 日志模塊

在使用 nodejs winston 模塊中,加上相關(guān)的兩個模塊,事倍功半。

  1. express-winston
  2. winston-daily-rotate-file

express-winston

是 express-winston 的 winston 的增加版, 是作為 express 的中間件來打印日志,不僅有請求頭信息,并且有響應時間。
作為中間件, 為什么會有響應時間呢? 因為 express-winston 改寫了 express 的 res.end 辦法, 是請求結(jié)束后再打的日志。

代碼片段

var end = res.end;res.end = function(chunk, encoding) { res.responseTime = (new Date) - req._startTime; res.end = end; res.end(chunk, encoding); ... }

express-winston 沒有修改或者擴展 winston 的transport, 而 winston-daily-rotate-file 正是增強了 winston 的transport 辦法

winston-daily-rotate-file

winston-daily-rotate-file 是 winston 擴展, 增加了 transport 的辦法,使 winston 有滾動日志的能力。

結(jié)合使用

我們來一個需求: 如何讓 express-winston 打印日志的時候,也打印出接口 /api 的請求參數(shù)和響應數(shù)據(jù)?

  1. 該日志中間件應該在調(diào)用鏈 api 后面, api/* 業(yè)務(wù)處理之前。 like: app.use('/api', apiRequestLogger, apiHandler)
  2. 要獲取到響應數(shù)據(jù), 就要在業(yè)務(wù)處理完后 send 出來后才能捕獲到,express 所有的請求響應最后都是走 res.send 我們可以從這里入手捕獲響應數(shù)據(jù)

代碼如下

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)}

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網(wǎng)。


注:相關(guān)教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 逊克县| 什邡市| 阳信县| 乌拉特后旗| 伊通| 德兴市| 周至县| 丹东市| 乡城县| 长顺县| 桐庐县| 平潭县| 营口市| 威信县| 昂仁县| 宽城| 麻阳| 上犹县| 望都县| 盐源县| 明水县| 修文县| 昌吉市| 重庆市| 鸡东县| 竹溪县| 甘孜县| 大名县| 静宁县| 浑源县| 济源市| 阳西县| 金湖县| 台东县| 嵩明县| 黄骅市| 柳林县| 龙川县| 株洲市| 昭苏县| 宁南县|