'use strict'; /** * 自动记录日志 * * @author CaiAoLin * @date 2017/10/30 * @version */ const os = require('os'); module.exports = options => { return async function autoFinishLogger(ctx, next) { await next(); if (ctx.url.indexOf('/public/') === 0) return; const responseTime = new Date(); const runTime = responseTime.getTime() - ctx.logInfo.time.getTime(); let logData; if (ctx.session && ctx.session.sessionUser) { const cpus = os.cpus(); const endCpus = cpus.map(x => { return `${((1-x.times.idle/(x.times.idle+x.times.user+x.times.nice+x.times.sys+x.times.irq))*100).toFixed(2)}%` }); logData = { id: ctx.logId, requestTime: ctx.logInfo.time, responseTime, runTime, beginCpus: ctx.logInfo.cpus, endCpus, user: ctx.session.sessionUser.accountId, userName: ctx.session.sessionUser.name, loginType: ctx.session.sessionUser.loginType, pCode: ctx.session.sessionProject.code, data: ctx.request.body, }; } else { logData = { id: ctx.logId, requestTime: ctx.logTime, responseTime, runTime, }; } const bLogger = runTime > 500 ? ctx.getLogger('warning') : ctx.getLogger('finish'); bLogger.info(JSON.stringify(logData)); await ctx.service.globalLog.responseLog(runTime); }; };