Nest js自定义记录器使console.log加倍



在通过扩展NestJS中的默认记录器来实现自定义记录器时遇到问题。我遵循了文档https://docs.nestjs.com/techniques/logger#using-用于应用程序日志记录的记录器。

import { Injectable, Logger, Scope } from '@nestjs/common';
@Injectable({ scope: Scope.TRANSIENT })
export class LoggerService extends Logger {
votes = 0;
debug(message: string, trace?: string) {
super.debug(message, trace);
}
error(message: string, trace?: string) {
super.error(message, trace);
}
log(message: string, trace?: string) {
this.votes = this.votes + 1;
console.log(this.votes, 'log', message);
super.log(message, trace);
}
verbose(message: string, trace?: string) {
super.verbose(message, trace);
}
warn(message: string, trace?: string) {
super.warn(message, trace);
}
}

以及在主要的中

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { AllExceptionsFilter } from './shared/exception-filters/all-exception-filters';
import { LoggerService } from './shared/modules/logger/logger.service';
async function bootstrap() {
const app = await NestFactory.create(AppModule, {
logger: false,
});
app.useLogger(new LoggerService());
app.useGlobalFilters(new AllExceptionsFilter());
await app.listen(3000);
}
bootstrap();

在我的控制器

Controller('user')
export class UserController {
constructor(private readonly userService: UserService, private logger: LoggerService) {}
@Get('/logger-example')
getLoggerExample() {
this.logger.log('it works ?');
return 'loggerExample';
}

当然,用户模块导入记录器模块。

我对那个记录器有两个问题:

第一个:

当我点击user/logger-example时,我从Logger获得了两次日志。看起来main.tsapp.useLogger(new LoggerService());的记录器是和注入的实例一起执行的,将来我想放一些异步记录器,比如pino之类的,我担心日志会被发送两次。我认为我的配置有问题,因为它看起来不像是常见的问题。更重要的是,从默认记录器我得到了一条正确的消息。

第二个:

如果我也将该服务注入不同的模块,例如支付。并使端点与用户相同,Logger类上的投票字段始终为0。这是否适用于瞬态喷射范围?因为据我所知,它应该按模块注入。因此,在一个模块中,计数器不应该重新设置种子。

是否正确配置?或者这是正常行为?我真的很害怕在一个this.logger.log中执行两个记录器。

我发现,传递到super.log中的所有元素都被强制为另一个日志行。所以重复的日志来自super.log中的两个参数。请只转发消息。

log(message: string) {
this.votes = this.votes + 1;
console.log(this.votes, 'log', message);
super.log(message);
}

最新更新