Necesito cambiar el nivel de Winston con mi punto final REST. He creado un servicio de registrador como este:
@Injectable() export class CustomLoggerService implements LoggerService { private logger: Logger constructor() { this.logger = createLogger(this.getLoggerInstance()) } getLoggerInstance(customLevel?: string): LoggerOptions { const console = new transports.Console({ level: customLevel || 'info', format: format.combine( format.timestamp(), format.json(), ), }) return { exitOnError: false, handleExceptions: true, transports: [console], } } // THIS METHOD DOESN'T WORK updateLevel(level: string): void { this.logger = createLogger(this.getLoggerInstance(level)) // I also tried edit level in transports directly but not helps // this.logger.transports.forEach(t => (t.level = level)) } // implemented log messages }
Este registrador que estoy usando entonces en boostrap de aplicación como esta:
const app = await NestFactory.create(AppModule, { logger: true }) const logger = app.get(CustomLoggerService) app.useLogger(logger)
La aplicación está utilizando internamente mi registrador y todo está bien, pero no puedo cambiar el nivel en el tiempo de ejecución.
En mis proveedores, estoy usando un registrador como este:
@Controller('foo') export class FooController{ private readonly logger = new Logger(FooController.name) // I also tried inject it with DI like this but same behavior // constructor(private readonly logger: CustomLoggerService) {} @Get() async index(): Promise<void> { this.logger.log('This I am able to see in console') this.logger.log('This I am NOT able to see in console') } }
¿Tienes idea de lo que está mal con el código de arriba? Gracias.