白羽王种鸽,爱q网,蛮领主
winston 日志模块
在使用 nodejs winston 模块中,加上相关的两个模块,事倍功半。
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 的请求参数和响应数据?
代码如下
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) }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
利用JavaScript更改input中radio和checkbox样式
网友评论