尝试使用nest-winston日志
npm install --save nest-winston winston
根据文档在main.ts中使用
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { createLogger } from 'winston';
import * as winston from 'winston';
import { WinstonModule, utilities, } from 'nest-winston'
async function bootstrap() {
const instance = createLogger({
transports: [
new winston.transports.Console({
level: 'info',
format: winston.format.combine(
winston.format.timestamp(),
utilities.format.nestLike()
)
})
]
})
const app = await NestFactory.create(AppModule, {
logger: WinstonModule.createLogger({
instance
})
});
await app.listen(7000);
}
bootstrap();
在app.module.ts中providers提供Logger
import { Logger, Module } from '@nestjs/common';
providers: [Logger],
再根据文档在UserController中引入
@Controller('user')
export class UserController {
constructor(
private userService: UserService,
@Inject(Logger) private readonly logger: LoggerService
) {}
执行
pnpm start:dev
控制台打印报错:
[NestWinston] Error 2024/2/29 15:19:38 [ExceptionHandler]
Nest can't resolve dependencies of the UserController (UserService, ConfigService, ?). Please make sure that the argument Logger at index
[2] is available in the UserModule context.
Potential solutions:
- Is UserModule a valid NestJS module?
- If Logger is a provider, is it part of the current UserModule?
- If Logger is exported from a separate @Module, is that module imported within UserModule?
@Module({
imports: [ /* the Module containing Logger */ ]
})
按道理说, 我已经在app.module.ts模块中正确提供了Logger了。 但是UserController.ts无法正确使用。
解决方法是:
在user.module.ts也加上这个Logger
import { Logger, Module } from '@nestjs/common';
import { UserController } from './user.controller';
import { UserService } from './user.service';
@Module({
controllers: [UserController],
providers: [UserService, Logger],
})
export class UserModule {}