在NestJS中,我有自定义记录器:
import { Injectable, Logger, Scope } from '@nestjs/common';
@Injectable({ scope: Scope.TRANSIENT })
export class LoggerService extends Logger {
log(message: any) {
super.log(message);
}
error(message: any) {
super.log(message);
}
warn(message: any) {
super.log(message);
}
debug(message: any) {
super.log(message);
}
verbose(message: any) {
super.log(message);
}
setContext(context: string) {
super.context = context;
}
}
它在全球注册:
import { Global, Module } from '@nestjs/common';
import { LoggerService } from './logger.service';
@Global()
@Module({
providers: [LoggerService],
exports: [LoggerService],
})
export class LoggerModule {}
是否有任何方法可以在服务构造函数中以某种方式在注入时传递上下文,并避免在每个服务中执行logger.setContext(上下文(,而只是在LoggerService构造函数中设置它?
现在的用法示例:
constructor(private logger: LoggerService) {
this.logger.setContext(ClassName.name);
}
预期用途:
constructor(private logger: LoggerService) {}
执行private logger: LoggerService
时,没有机会进行.setContext(Service.name)
调用。
您可以执行以下操作:@Logger(Service.name) private logger: LoggerService
如何?阅读本文:高级NestJS:动态提供商