亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

nodejs 日志模塊winston的使用方法

 更新時(shí)間:2018年05月02日 14:30:09   作者:combine  
本篇文章主要介紹了nodejs 日志模塊winston的使用方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

winston 日志模塊

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

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

express-winston

是 express-winston 的 winston 的增加版, 是作為 express 的中間件來打印日志,不僅有請求頭信息,并且有響應(yīng)時(shí)間。
作為中間件, 為什么會(huì)有響應(yīng)時(shí)間呢? 因?yàn)?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 沒有修改或者擴(kuò)展 winston 的transport, 而 winston-daily-rotate-file 正是增強(qiáng)了 winston 的transport 辦法

winston-daily-rotate-file

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

結(jié)合使用

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

  1. 該日志中間件應(yīng)該在調(diào)用鏈 api 后面, api/* 業(yè)務(wù)處理之前。 like: app.use('/api', apiRequestLogger, apiHandler)
  2. 要獲取到響應(yīng)數(shù)據(jù), 就要在業(yè)務(wù)處理完后 send 出來后才能捕獲到,express 所有的請求響應(yīng)最后都是走 res.send 我們可以從這里入手捕獲響應(yīng)數(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)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Node.js 異步異常的處理與domain模塊解析

    Node.js 異步異常的處理與domain模塊解析

    本篇文章主要介紹了Node.js 異步異常的處理與domain模塊解析,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • NodeJs Express中間件使用流程解析

    NodeJs Express中間件使用流程解析

    Express中間件本質(zhì)上就是一個(gè)function處理函數(shù),多個(gè)中間件之間,共享同一份req和res,我們就可以在上游的中間件中統(tǒng)一為req或者res對象添加自定義的屬性或方法,供下游的中間件或路由進(jìn)行使用,非常方便
    2023-01-01
  • Node server生成Swagger接口文檔步驟詳解

    Node server生成Swagger接口文檔步驟詳解

    本文介紹使用NodeJs搭建的后端server快速生成Swagger接口文檔的技巧,本文有詳細(xì)的步驟講解,通過代碼示例給大家介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-01-01
  • 詳解node nvm進(jìn)行node多版本管理

    詳解node nvm進(jìn)行node多版本管理

    這篇文章主要介紹了詳解node nvm進(jìn)行node多版本管理,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • 安裝node-sass的方法步驟

    安裝node-sass的方法步驟

    本文主要介紹了安裝node-sass的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • Node.js操作Firebird數(shù)據(jù)庫教程

    Node.js操作Firebird數(shù)據(jù)庫教程

    這篇文章主要為大家分享了Node.js操作Firebird數(shù)據(jù)庫教程,思路清晰便于大家理解,感興趣的小伙伴們可以參考一下
    2016-03-03
  • node.js中的events.emitter.removeAllListeners方法使用說明

    node.js中的events.emitter.removeAllListeners方法使用說明

    這篇文章主要介紹了node.js中的events.emitter.removeAllListeners方法使用說明,本文介紹了events.emitter.removeAllListeners 的方法說明、語法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • node-gyp安裝vuetify編譯失敗gyp?ERR的問題及解決

    node-gyp安裝vuetify編譯失敗gyp?ERR的問題及解決

    這篇文章主要介紹了node-gyp安裝vuetify編譯失敗gyp?ERR的問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 關(guān)于Mac下安裝nodejs、npm和cnpm的教程

    關(guān)于Mac下安裝nodejs、npm和cnpm的教程

    本文通過圖文并茂的形式給大家介紹了Mac下安裝nodejs、npm和cnpm的教程,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2018-04-04
  • Node.js爬取豆瓣數(shù)據(jù)實(shí)例分析

    Node.js爬取豆瓣數(shù)據(jù)實(shí)例分析

    這篇文章通過實(shí)例給大家詳細(xì)分析了Node.js爬取豆瓣數(shù)據(jù)的過程以及具體方法步驟,有興趣的朋友可以參考學(xué)習(xí)下。
    2018-03-03

最新評論