NestJS - 避免在记录器注入的构造函数中使用 setContext()

NestJS - avoid setContext() in constructor on logger injection

在 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(context) - 而只是在 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

怎么样?阅读这篇文章:Advanced NestJS: Dynamic Providers