node koa 日志打印中间件
import * as log4js from 'log4js'
import * as dayjs from 'dayjs'
import * as path from 'path'
const outDir = path.resolve(__dirname, 'request.log')
log4js.configure({
appenders: { console: { type: 'file', filename: outDir } },
categories: { default: { appenders: [ 'console' ], level: 'info' } },
pm2: true
})
const logger = log4js.getLogger()
const log = () => {
return async (ctx, next) => {
const startTime = Date.now()
await next()
const endTime = Date.now()
const logs = ctx.state.logs || {}
const { query, body, headers } = ctx.request
const data = {
time: dayjs().format('YYYY-MM-DD HH:mm:ss'),
method: ctx.method,
url: ctx.url,
ip: ctx.request.ip,
status: ctx.status,
cost: endTime - startTime,
query,
params: ctx.params,
body,
headers,
...logs
}
data.result = ctx.body || 'no content'
if (ctx.body?.code !== 0) {
logger.error(JSON.stringify(data))
} else {
logger.info(JSON.stringify(data))
}
}
}
export default log