auto_finish_logger.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. 'use strict';
  2. /**
  3. * 自动记录日志
  4. *
  5. * @author CaiAoLin
  6. * @date 2017/10/30
  7. * @version
  8. */
  9. const os = require('os');
  10. module.exports = options => {
  11. return async function autoFinishLogger(ctx, next) {
  12. await next();
  13. if (ctx.url.indexOf('/public/') === 0) return;
  14. if (!ctx.logInfo) return;
  15. const responseTime = new Date();
  16. const runTime = responseTime.getTime() - ctx.logInfo.time.getTime();
  17. let logData;
  18. if (ctx.session && ctx.session.sessionUser) {
  19. const cpus = os.cpus();
  20. const endCpus = cpus.map(x => {
  21. return `${((1-x.times.idle/(x.times.idle+x.times.user+x.times.nice+x.times.sys+x.times.irq))*100).toFixed(2)}%`
  22. });
  23. logData = {
  24. id: ctx.logId,
  25. requestTime: ctx.logInfo.time, responseTime, runTime,
  26. beginCpus: ctx.logInfo.cpus, endCpus,
  27. user: ctx.session.sessionUser.accountId, userName: ctx.session.sessionUser.name, loginType: ctx.session.sessionUser.loginType,
  28. pCode: ctx.session.sessionProject.code,
  29. data: ctx.request.body,
  30. };
  31. } else {
  32. logData = {
  33. id: ctx.logId, requestTime: ctx.logTime, responseTime, runTime,
  34. };
  35. }
  36. const bLogger = runTime > 500 ? ctx.getLogger('warning') : ctx.getLogger('finish');
  37. bLogger.info(JSON.stringify(logData));
  38. await ctx.service.globalLog.responseLog(runTime);
  39. };
  40. };