记录仪

记录仪

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

此解决方案的唯一缺点是您的第一个初始化消息将不会由您的记录器实例处理,但此时它并不重要