auto_finish_logger.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  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. requestTime: ctx.logInfo.time, responseTime, runTime,
  24. beginCpus: ctx.logInfo.cpus, endCpus,
  25. user: ctx.session.sessionUser.accountId, userName: ctx.session.sessionUser.name, loginType: ctx.session.sessionUser.loginType,
  26. pCode: ctx.session.sessionProject.code,
  27. data: ctx.request.body,
  28. };
  29. } else {
  30. logData = {
  31. requestTime: ctx.logTime, responseTime, runTime,
  32. };
  33. }
  34. const bLogger = runTime > 500 ? ctx.getLogger('warning') : ctx.getLogger('finish');
  35. bLogger.info(JSON.stringify(logData));
  36. };
  37. };