如何获取当前请求?
使用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用户
大家又什么想法?