Node.js 日志会话用户NodeJs NestJs
我正在尝试记录会话用户,但它没有像我想象的那样工作。我想我可以把它添加到中间件,但显然这是行不通的。是否有一个策略或模式,我应该用来实现这一点Node.js 日志会话用户NodeJs NestJs,node.js,nestjs,log4js-node,Node.js,Nestjs,Log4js Node,我正在尝试记录会话用户,但它没有像我想象的那样工作。我想我可以把它添加到中间件,但显然这是行不通的。是否有一个策略或模式,我应该用来实现这一点 PassportAuthInterceptor日志应该有不同的用户,但它只使用中间件设置的最后一个用户 我在log4js文档中看到他们在使用它,但很明显,我下面演示的方式似乎没有意义 我还看到,有一个AuthLibrary.currentUser()调用,但我不确定如何实现这一点 鉴于NestJS就是这样,我可以将用户以某种方式注入到服务中,因为这可以
PassportAuthInterceptor
日志应该有不同的用户,但它只使用中间件设置的最后一个用户
我在log4js文档中看到他们在使用它,但很明显,我下面演示的方式似乎没有意义
我还看到,有一个AuthLibrary.currentUser()
调用,但我不确定如何实现这一点
鉴于NestJS就是这样,我可以将用户以某种方式注入到服务中,因为这可以解决我的问题
导出类loggermdleware实现了嵌套中间件{
private readonly logger=new AppLoggerService(loggermdleware.name);
公用(请求、恢复、下一步:()=>void){
log4js.getLogger('default').addContext('user',user.authName)
next();
}
}
所以这有点粗糙,但它可以工作,我创建了两个记录器一个全局(正常)和一个会话(范围请求)。问题是passport登录使用的任何类都不能引用SessionLoggerService。。这将使我将类分为全局类和会话类,以便它们调用的类可以使用正确的记录器
@Injectable({scope:scope.REQUEST})
导出类SessionLoggerService实现LoggerService{
公共静态记录器=未定义;
构造函数(@Inject(REQUEST)私有只读请求){
SessionLoggerService.logger=log4js.getLogger('user');
const user=this.req&&this.req.user?this.req.user:null;
如果(用户){
SessionLoggerService.logger.addContext('user',user.authName);
}否则{
SessionLoggerService.logger.addContext('user','');
}
}
....
}