import { Middleware } from 'koa' import { ilog } from 'ilog' import { Context } from '../types' export const logger: Middleware = async (ctx: Context, next) => { const startTime = Date.now() if (ctx.path === '/version') return next() await next() // 测试不输出日志 if (process.env.NODE_ENV !== 'test_ci' && process.env.NODE_ENV !== 'test') { ilog.info({ url: ctx.url, ip: ctx.get('x-real-ip') || ctx.get('x-forwarded-for') || ctx.ip, method: ctx.method, status: ctx.status, durantion: Date.now() - startTime, userId: ctx.state.user ? ctx.state.user._id : null }) } } export const catcher: Middleware = async (ctx: Context, next: any) => { try { await next() } catch (e) { ctx.status = e.status || 400 ctx.body = { code: ctx.status, error: ctx.status >= 500 ? 'internal server error' : e.message } if (ctx.status >= 400) { ilog.error(e) } } }