【问题标题】:NestJS - avoid setContext() in constructor on logger injectionNestJS - 在记录器注入的构造函数中避免 setContext()
【发布时间】:2022-02-04 22:11:35
【问题描述】:

在 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) {}

【问题讨论】:

    标签: javascript node.js typescript dependency-injection nestjs


    【解决方案1】:

    当您拨打private logger: LoggerService 时,就没有机会拨打.setContext(Service.name) 电话。

    你可以这样做:
    @Logger(Service.name) private logger: LoggerService

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

    【讨论】:

    • 感谢您的帮助,现在一切正常!
    猜你喜欢
    • 2021-03-31
    • 2011-01-26
    • 1970-01-01
    • 2018-10-11
    • 1970-01-01
    • 2011-03-03
    相关资源
    最近更新 更多