En NestJS tengo un registrador personalizado:
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; } }Está registrado a nivel mundial:
import { Global, Module } from '@nestjs/common'; import { LoggerService } from './logger.service'; @Global() @Module({ providers: [LoggerService], exports: [LoggerService], }) export class LoggerModule {}¿Hay alguna forma de pasar el contexto de alguna manera en la inyección en el constructor del servicio y evitar la ejecución de logger.setContext (contexto) en cada servicio, en lugar de configurarlo en el constructor LoggerService ?
Ejemplo de uso ahora:
constructor(private logger: LoggerService) { this.logger.setContext(ClassName.name); }Uso esperado:
constructor(private logger: LoggerService) {}Cuando private logger: LoggerService , no hay posibilidad de realizar esa .setContext(Service.name) .
Lo que podrías hacer es algo como:
@Logger(Service.name) private logger: LoggerService
¿Cómo? Lea este artículo: NestJS avanzado: proveedores dinámicos