请求范围的记录器

时间:2019-07-17 07:51:07

标签: dependency-injection nestjs

我们在使共享日志记录模块正常工作时遇到一些麻烦。

挑战: 我们希望每次都将请求上下文与日志消息一起记录下来(这是由于我们登录到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堆栈的人吗?

我很高兴提供信息。谢谢。

0 个答案:

没有答案