- 安装依赖koa-logger,koa-morgan, rotating-file-stream,koa-logger中间件可以实现接口请求信息的记录,koa-morgan中间件把需要保存的请求信息保存到日志文件中,rotating-file-stream可以实现日志信息按照时间划分,moment 用于记录当前时间
npm install koa-logger koa-morgan rotating-file-stream moment --save
- 在koa项目入口文件中引入这些依赖并使用
const Koa = require('koa')
const userParser = require('koa-bodyparser')
const errorHandler = require('./error-handle')
const useRoutes = require('../router')
const logger = require('koa-logger');
const morgan = require('koa-morgan');
const moment = require('moment');
const rfs = require('rotating-file-stream');
const app = new Koa()
//处理请求参数
app.use(userParser())
// 创建日志文件
const accessLogStream = rfs.createStream(() => {
const format = moment().format('YYYY-MM-DD');
return `access-${format}.log`;
}, {
interval: '1d', // 按天拆分
path: './logs'
});
// 使用koa-logger中间件记录请求日志
app.use(logger());
// 定义body变量用于保存请求体参数
let body
app.use( async (ctx,next)=>{
body = ctx.request.body
await next()
})
// 使用koa-morgan中间件把需要保存的请求信息保存到日志文件中
app.use(morgan((tokens, req, res) => {
return [
moment().format('YYYY-MM-DD HH:mm:ss'), // 添加日期时间
tokens.method(req, res),
tokens.url(req, res),
tokens.status(req, res),
tokens['response-time'](req, res)+'ms',
JSON.stringify(req.headers), // 请求头参数
JSON.stringify(body)// 请求体参数
].join('----');
}, { stream: accessLogStream }));
// 前端打包项目保存路径
app.use(require('koa-static')(__dirname + '/public/dist'))
// 路由挂载
useRoutes(app)
// 错误处理
app.on('error', errorHandler)
module.exports = app
-
注意事项
请求体数据试了好多种办法在koa-morgan中都拿不到,于是我koa-morgan之前新增了一个中间件来获取请求体数据,这里koa-bodyparser需要在koa-morgan之前使用,用来确保请求体被解析