如何获取当前请求?
发布于 7 年前 作者 lyt308012546 2159 次浏览 来自 问答

使用log4js记录日志,需要知道每条日志是哪个请求记录的,log4js有以下代码,可以通过一个函数设置tokens。 文档地址:https://nomiddlename.github.io/log4js-node/layouts.html

log4js.configure({
  appenders: {
    out: { type: 'stdout', layout: {
      type: 'pattern',
      pattern: '%d %p %c %x{user} %m%n',
      tokens: {
        user: function(logEvent) {
          return AuthLibrary.currentUser();
        }
      }
    }}
  },
  categories: { default: { appenders: ['out'], level: 'info' } }
});
const logger = log4js.getLogger();
logger.info('doing something.');

可以看到获取user的方法是AuthLibrary.currentUser(),这个方法如何去实现?请考虑并发情况和node单线程会导致的问题。

如果有AuthLibary中有一个私有变量存放user,currentUser()返回_user, 当请求进来,中间件把user放进去,然后log4js通过currentUser()获取私有变量_user, 那么当同时进来AB两个用户请求,A用户放进去,这时B请求过来,那么B用户覆盖A用户_user变量, 这时候正好A请求记录日志任何日志,currentUser()都会获取的是B用户

大家又什么想法?

回到顶部