auto_finish_logger.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  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. const responseTime = new Date();
  15. const runTime = responseTime.getTime() - ctx.logInfo.time.getTime();
  16. let logData;
  17. if (ctx.session && ctx.session.sessionUser) {
  18. const cpus = os.cpus();
  19. const endCpus = cpus.map(x => {
  20. return `${((1-x.times.idle/(x.times.idle+x.times.user+x.times.nice+x.times.sys+x.times.irq))*100).toFixed(2)}%`
  21. });
  22. logData = {
  23. id: ctx.logId,
  24. requestTime: ctx.logInfo.time, responseTime, runTime,
  25. beginCpus: ctx.logInfo.cpus, endCpus,
  26. user: ctx.session.sessionUser.accountId, userName: ctx.session.sessionUser.name, loginType: ctx.session.sessionUser.loginType,
  27. pCode: ctx.session.sessionProject.code,
  28. data: ctx.request.body,
  29. };
  30. } else {
  31. logData = {
  32. id: ctx.logId, requestTime: ctx.logTime, responseTime, runTime,
  33. };
  34. }
  35. const bLogger = runTime > 500 ? ctx.getLogger('warning') : ctx.getLogger('finish');
  36. bLogger.info(JSON.stringify(logData));
  37. await ctx.service.globalLog.responseLog(runTime);
  38. };
  39. };