我目前正在尝试使用唯一的请求 ID 扩展我的 NestJS (v7) 应用程序中的日志记录类。当我尝试在我的临时记录器中插入我的请求范围服务时,如果我将它注入某处,记录器总是 undefined
。
winston-logger.class.ts
import { Injectable, Scope } from '@nestjs/common';
import { Logger } from 'winston';
import { RequestInjector } from './request-injector.class';
import { WinstonAdapter } from './winston.adapter';
@Injectable({ scope: Scope.TRANSIENT })
export class WinstonLogger {
private readonly logger: Logger;
private requestId = 'default';
private context = 'default';
constructor(private readonly winstonAdapter: WinstonAdapter, private readonly requestInjector: RequestInjector) {
this.logger = this.winstonAdapter.getLogger();
this.requestId = this.requestInjector.getRequestId();
}
log(level: string, message: string, ...meta: any[]): void {
meta.push({ requestId: this.requestId });
this.logger.log(level, message, ...meta);
}
setContext(context: string) {
this.context = context;
}
}
request-injector.class.ts
import { Injectable, Scope } from '@nestjs/common';
@Injectable({ scope: Scope.REQUEST })
export class RequestInjector {
private requestId = 'default';
constructor() {}
setRequestId(requestId: string) {
this.requestId = requestId;
}
getRequestId(){
return this.requestId;
}
}
如果我将 RequestInjector
更改为 DEFAULT
(Singleton) 或 TRANSIENT
记录器已定义但如果我将其更改为 REQUEST
记录器是 {{1}如果我在某处注入它。我是不是遗漏了什么,为什么这不起作用?
我无法更改记录器的范围,因为记录器中的上下文是 undefined
。
我想要实现的是,每个注入我的记录器的类都有自己的上下文,但对于请求应该具有相同的 requestId。