最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

nodejs 日志模塊winston的使用方法

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

winston 日志模塊

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

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

express-winston

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

代碼片段

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 有滾動日志的能力。

結合使用

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

  1. 該日志中間件應該在調用鏈 api 后面, api/* 業(yè)務處理之前。 like: app.use('/api', apiRequestLogger, apiHandler)
  2. 要獲取到響應數(shù)據(jù), 就要在業(yè)務處理完后 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)
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • NestJS核心概念之Middleware中間件創(chuàng)建使用示例

    NestJS核心概念之Middleware中間件創(chuàng)建使用示例

    這篇文章主要為大家介紹了NestJS核心概念之Middleware中間件創(chuàng)建使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • node.js中實現(xiàn)kindEditor圖片上傳功能的方法教程

    node.js中實現(xiàn)kindEditor圖片上傳功能的方法教程

    最近在做一個類似于論壇的系統(tǒng),帖子需要進行圖文并茂的顯示,所以用到了富文本編輯器:kindeditor,下面這篇文章主要給大家介紹了在node.js中實現(xiàn)kindEditor圖片上傳功能的方法教程,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-04-04
  • 從零開始學習Node.js系列教程六:EventEmitter發(fā)送和接收事件的方法示例

    從零開始學習Node.js系列教程六:EventEmitter發(fā)送和接收事件的方法示例

    這篇文章主要介紹了Node.js EventEmitter發(fā)送和接收事件的方法,結合實例形式分析了EventEmitter發(fā)送和接收事件的原理、實現(xiàn)方法與相關操作技巧,需要的朋友可以參考下
    2017-04-04
  • Windows下Node爬蟲神器Puppeteer安裝記

    Windows下Node爬蟲神器Puppeteer安裝記

    這篇文章主要介紹了Windows下Node爬蟲神器Puppeteer安裝記,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • node.js中的fs.writeFile方法使用說明

    node.js中的fs.writeFile方法使用說明

    這篇文章主要介紹了node.js中的fs.writeFile方法使用說明,本文介紹了fs.writeFile的方法說明、語法、接收參數(shù)、使用實例和實現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • node制作一個視頻幀長圖生成器操作分享

    node制作一個視頻幀長圖生成器操作分享

    這篇文章主要介紹了node制作一個視頻幀長圖生成器操作分享,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-08-08
  • Node.js模塊化原理與應用詳細介紹

    Node.js模塊化原理與應用詳細介紹

    本篇文章我們將進入我們的模塊化學習,node的模塊化正是node的最大特點,能夠幫住我們將繁瑣的復雜代碼變成一個個的小模塊,便于引用
    2022-09-09
  • NodeJs中的VM模塊詳解

    NodeJs中的VM模塊詳解

    這篇文章主要介紹了NodeJs中的VM模塊詳解,本文講解了什么是VM? 、VM模塊的runInThisContext、runInThisContext方法等內容,需要的朋友可以參考下
    2015-05-05
  • 解決npm install命令一直失敗的坑

    解決npm install命令一直失敗的坑

    文章總結:執(zhí)行npminstall命令失敗,可能是由于代理問題,可以嘗試更換代理、權限、VSCode版本或網(wǎng)絡環(huán)境(如使用移動熱點)來解決
    2024-12-12
  • 使用Node.js在深度學習中做圖片預處理的方法

    使用Node.js在深度學習中做圖片預處理的方法

    這篇文章主要介紹了使用Node.js在深度學習中做圖片預處理的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09

最新評論

璧山县| 桦南县| 莲花县| 板桥市| 遵义市| 集安市| 广平县| 高邑县| 中卫市| 周宁县| 广德县| 凌源市| 香河县| 大港区| 特克斯县| 公安县| 莱西市| 白山市| 家居| 宁夏| 珲春市| 农安县| 乌鲁木齐县| 安西县| 噶尔县| 兖州市| 高平市| 宁明县| 辽宁省| 奉节县| 漠河县| 山丹县| 嵊泗县| 石屏县| 顺平县| 台中市| 太康县| 阿克苏市| 淅川县| 荥经县| 耿马|