express+morganBody记录日志(包含请求数据和响应数据)
app.js:
const express = require('express')
const bodyParser = require('body-parser')
const cors = require('cors')
const history = require('connect-history-api-fallback')
const app = express()
const { light } = require('./router/light')
const { air } = require('./router/air')
const { sale } = require('./router/sale')
const compression = require('compression')
const { createProxyMiddleware } = require('http-proxy-middleware')
//const morgan = require('morgan')
const morganBody = require('morgan-body')
const fs = require('fs')
const FileStreamRotator = require('file-stream-rotator')
const path = require('path')
app.use(compression({ filter: shouldCompress }))
//app.use(history())
//app.use(express.static('D:/zlhx-ui'))
//app.use(express.static('D:/tan-ui'))
//app.use(express.static('../zlhx-ui'))
//app.use(express.static('../blog/docs'))
//app.use(express.static('../tan-ui'))
//app.use(express.static('../air-github/docs'))
//app.use(express.static('public'))
//app.use(express.static('upload'))
app.use(express.static('/temp')) //, { index: '/air/origin/master/index.html'}
app.use(cors())
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
// parse application/json
app.use(bodyParser.json())
function shouldCompress(req, res) {
if (req.headers['x-no-compression']) {
// don't compress responses with this request header
return false
}
// fallback to standard filter function
return compression.filter(req, res)
}
// app.use((res, req, next) => {
// setTimeout(() => {
// next()
// }, 4000)
// })
const logDirectory = path.join(__dirname, 'log')
// ensure log directory exists
fs.existsSync(logDirectory) || fs.mkdirSync(logDirectory)
// create a rotating write stream
const accessLogStream = FileStreamRotator.getStream({
date_format: 'YYYYMMDD',
filename: path.join(logDirectory, 'access-%DATE%.log'),
frequency: 'daily',
verbose: false
})
// setup the logger
//app.use(morgan('combined', { stream: accessLogStream }))
// app.use(
// morgan(
// function (tokens, req, res) {
// console.log(res)
// return [
// tokens.method(req, res),
// tokens.url(req, res),
// tokens.status(req, res),
// 'body:',
// JSON.stringify(req.body)
// ].join(' ')
// },
// { stream: accessLogStream }
// )
// )
morganBody(app, {
// .. other settings
noColors: true,
stream: accessLogStream,
})
app.get('/', function (req, res) {
res.redirect('/air/origin/master/#/air/light/extra/home')
})
//知了好学的接口
light(app)
//销售系统
sale(app)
//无代码平台的接口
air(app)
//启动命令:set PORT=3000 && node app
const PORT = process.env.PORT || 81
app.listen(PORT, () => {
console.log(PORT)
console.log('hello,world1')
})
access-20211008.log:
Request: POST /api/table/search?id=a&type=666 at Fri Oct 08 2021 17:17:04 GMT+0800, IP: ::1, User Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36
Request Body:
{
"tableId": "0",
"page": 1,
"pageSize": 10,
"searchParams": {},
"loginUserId": null
}
Response Body:
{
"code": 200,
"data": {
"list": [
{
"id": "1",
"name": "夏娜",
"createTime": 1633684615235
},
{
"id": "2",
"name": "李芳",
"createTime": 1633684615235
},
{
"id": "3",
"name": "汤娟",
"createTime": 1633684615235
},
{
"id": "4",
"name": "冯霞",
"createTime": 1633684615235
},
{
"id": "5",
"name": "尹超",
"createTime": 1633684615235
},
{
"id": "6",
"name": "龙杰",
"createTime": 1633684615235
},
{
"id": "7",
"name": "汤敏",
"createTime": 1633684615235
},
{
"id": "8",
"name": "乔超",
"createTime": 1633684615235
},
{
"id": "9",
"name": "戴伟",
"createTime": 1633684615235
},
{
"id": "10",
"name": "董静",
"createTime": 1633684615235
}
],
"total": 100,
"current": 1,
"pageSize": 10,
"fields": [
{
"id": 0,
"title": "ID",
"dataIndex": "id",
"isColumn": true,
"isSearch": false,
"isModalField": false,
...
Response: 200 3.072 ms
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步