Node.js
发布时间:2019-10-11 发布网站:大佬教程 code.js-code.com
大佬教程收集整理的这篇文章主要介绍了nodejs 日志模块winston的使用方法,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_
675_0@
winston 日志模块
@H_
675_0@在使用 nodejs winston 模块中,加上相关的两个模块,事倍功半。
- express-winston
- winston-daily-rotate-file
@H_
675_0@
express-winston
@H_
675_0@是 express-winston 的 winston 的增加版, 是作为 express 的中间件来打印日志,不仅有请求头信息,并且有响应时间。
作为中间件, 为什么会有响应时间呢? 因为 express-winston 改写了 express 的 re
s.end 办法, 是请求结束后再打的日志。
@H_
675_0@代码片段
s.end;
re
s.end = function(chunk,encoding)
{
re
s.responseTime = (new Dat
E) - req._startTime;
re
s.end = end;
re
s.end(chunk,encoding
);
...
}@H_
489_20@
@H_
675_0@express-winston 没有修改或者扩展 winston 的transport, 而 winston-daily-rotate-file 正是增强了 winston 的transport 办法
@H_
675_0@
winston-daily-rotate-file
@H_
675_0@winston-daily-rotate-file 是 winston 扩展, 增加了 transport 的办法,使 winston 有滚动日志的能力。
@H_
675_0@
结合使用
@H_
675_0@我们来一个需求: 如何让 express-winston 打印日志的时候,也打印出接口 /api 的请求参数和响应数据?
- 该日志中间件应该在调用链 api 后面, api/* 业务处理之前。 like: app.use('/api',apirequestLogger,apiHandler)
- 要获取到响应数据, 就要在业务处理完后 send 出来后才能捕获到,express 所有的请求响应最后都是走 res.send 我们可以从这里入手捕获响应数据
@H_
675_0@代码如下
675_0@export let DailyRotateFileTransport = (file
Name) =>
{
return new (winston.transport
s.DailyRotateFil
E)(
{
fil
ename: path.join(proces
s.env.LOGPATH,
${filename}-%DATE%.log
),datePattern: 'YYYY-MM-DD-HH',// maxSize: '20m',maxFiles: '7d',
timestamp: () => new Date().format('yyyy-MM-dd hh:mm:s
s.S')
})
}
@H_
675_0@export let page
requestLogger = expressWinston.logger(
{
transports: [
DailyRotateFileTransport('page-
request')
],meta: true,// optional: control whether
you want to log the meta data about the
request (default to tru
E)
msg: '
http {{req.metho
D}}
{{req.url}}',// optional: customize the default logging
message. E.g. "
{{re
s.statusCod
E}}
{{req.metho
D}}
{{re
s.responseTim
E}}ms
{{req.url}}"
expressFormat: true,// Use the default Express/morgan
request format
Ting. 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 notPage
request =
false
let ignoreArr = ['/api','.js','.css','.png','.jpg','.gif']
ignoreArr.forEach(item =>
{
if (req.ur
l.indexOf(item) > -1) notPage
request = true
})
return notPage
request
} // optional: allows to skip some log
messages based on
request and/or response
})
@H_
675_0@export let api
requestLogger = (req,res,next) =>
{
let send = re
s.send
let content = ''
let query = req.query ||
{}
let body = req
.body ||
{}
re
s.send = function ()
{
content = arguments
[0]
send.apply(res,arguments)
}
expressWinston.logger(
{
transports: [
DailyRotateFileTransport('api-
request')
],// optional: control whether
you want to log the meta data about the
request (default to tru
E)
msg ()
{
return
http ${req.methoD} ${req.url} query ${JSON.Stringify(query)} body ${JSON.Stringify(body)} resData ${Content}
},colorize: true,res)
{
if (req.header
s.self) return true
return
false
} // optional: allows to skip some log
messages based on
request and/or response
})(req,next)
}
@H_
489_20@
@H_
675_0@以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持菜鸟教程。
大佬总结
以上是大佬教程为你收集整理的nodejs 日志模块winston的使用方法全部内容,希望文章能够帮你解决nodejs 日志模块winston的使用方法所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。