auto_finish_logger.js 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. 'use strict';
  2. /**
  3. * 自动记录日志
  4. *
  5. * @author CaiAoLin
  6. * @date 2017/10/30
  7. * @version
  8. */
  9. module.exports = options => {
  10. return async function autoFinishLogger(ctx, next) {
  11. await next();
  12. if (ctx.url.indexOf('/public/') === 0) return;
  13. const responseTime = new Date();
  14. const runTime = responseTime.getTime() - ctx.logTime.getTime();
  15. let logData;
  16. if (ctx.session && ctx.session.sessionUser) {
  17. logData = {
  18. requestTime: ctx.logTime, responseTime, runTime,
  19. user: ctx.session.sessionUser.accountId, userName: ctx.session.sessionUser.name, loginType: ctx.session.sessionUser.loginType,
  20. pCode: ctx.session.sessionProject.code,
  21. data: ctx.request.body,
  22. };
  23. } else {
  24. logData = {
  25. requestTime: ctx.logTime, responseTime, runTime,
  26. data: ctx.body,
  27. };
  28. }
  29. const bLogger = runTime > 500 ? ctx.getLogger('warning') : ctx.getLogger('finish');
  30. bLogger.info(JSON.stringify(logData));
  31. };
  32. };