我们在使共享日志记录模块正常工作时遇到一些麻烦。
挑战: 我们希望每次都将请求上下文与日志消息一起记录下来(这是由于我们登录到ELK堆栈并且其中有数百万个日志,因此请求上下文非常有用)。
问题:
之前是cls
,然后是cls-hooked
,但nest现在提供了自己的injection scopes,太棒了!
尽管如此,我们仍在努力提供一个模块,该模块看起来像可以插入的普通记录器,但是可以记录每行记录访问/记录请求上下文。
我们基本上需要这样的日志记录服务
@Injectable() // should this be already {scope: Scope.REQUEST}?
MyNiceLogger{
log(message: string, @Inject(REQUEST) private readonly request: Request){
winstonLogToELK(inflateMessageWithRequest(request, message));
}
}
我希望简易的伪代码足以应付挑战-我们记录的每一行都有上下文。
现在我们不希望创建100万个记录器实例(如果可能的话),它应该在进行日志调用时自动拉出当前请求。当前,我们(没有嵌套)有一个带有cls
的request-context-service,记录器在其中调用该服务以获取请求,但是我想可以避免这种情况?但是如何?
我们如何正确注释和构建此设置?我们不是唯一登录ELK堆栈的人吗?
我很高兴提供信息。谢谢。