记录仪
记录仪
Nest带有Logger
在实例化过程中使用的内部默认实现,以及在几种不同的情况下,例如发生的异常
,等等。但有时,您可能希望完全禁用日志记录,或者提供自定义实现并自行处理消息。为了关闭记录器,我们使用Nest的选项对象。
const app = await NestFactory.create(ApplicationModule, {
logger: false,
}
await app.listen(3000
尽管如此,我们可能希望在引擎盖下使用不同的记录器,而不是禁用整个记录机制。为了做到这一点,我们必须传递一个实现LoggerService
接口的对象。一个例子可以是内置的console
。
const app = await NestFactory.create(ApplicationModule, {
logger: console,
}
await app.listen(3000
但这不是一个好主意。但是,我们可以轻松创建自己的记录器。
import { LoggerService } from '@nestjs/common';
export class MyLogger implements LoggerService {
log(message: string) {}
error(message: string, trace: string) {}
warn(message: string) {}
}
然后,我们可以MyLogger
直接应用实例:
const app = await NestFactory.create(ApplicationModule, {
logger: new MyLogger(),
}
await app.listen(3000
扩展内置记录器
很多用例需要创建自己的记录器。你不必完全重新发明轮子。只需扩展内置Logger
类以部分覆盖默认实现,并使用super
委托将调用委托给父类。
import { Logger } from '@nestjs/common';
export class MyLogger extends Logger {
error(message: string, trace: string) {
// add your custom business logic
super.error(message, trace
}
}
依赖注入
如果要在记录器中启用依赖项注入,则必须使MyLogger
该类成为实际应用程序的一部分。例如,您可以创建一个LoggerModule
。
import { Module } from '@nestjs/common';
import { MyLogger } from './my-logger.service.ts';
@Module{
providers: [MyLogger],
exports: [MyLogger],
})
export class LoggerModule {};
一旦LoggerModule
在任何地方导入,框架将负责创建记录器的实例。现在,要在整个应用程序中使用相同的记录器实例,包括引导和错误处理的东西,请使用以下构造:
const app = await NestFactory.create(ApplicationModule, {
logger: false,
}
app.useLogger(app.get(MyLogger)
await app.listen(3000
此解决方案的唯一缺点是您的第一个初始化消息将不会由您的记录器实例处理,但此时它并不重要