Logger

Logger

Nest에는 인스턴스화 프로세스 중에 사용되며 발생한 예외 등과 같은 여러 가지 상황에서 사용되는 내부 Logger의 기본 구현이 제공됩니다. 그러나 때로는 로깅을 완전히 비활성화하거나 사용자 지정 구현을 제공하고 메시지를 직접 처리 할 수도 있습니다. 로거를 끄려면 Nest의 옵션 객체를 사용합니다.

const app = await NestFactory.create(ApplicationModule, {
  logger: false,
});
await app.listen(3000);

그럼에도 불구하고 전체 로깅 메커니즘을 비활성화 하는 대신 다른 로거를 사용하는 것이 좋습니다. 이를 위해서는 LoggerService 인터페이스를 만족시키는 객체를 전달해야 합니다. 예를 들어 내장 콘솔이 될 수 있습니다.

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) {}
  debug(message: string) {}
  verbose(message: string) {}
}

그런 다음 MyLogger 인스턴스를 직접 적용 할 수 있습니다.

const app = await NestFactory.create(ApplicationModule, {
  logger: new MyLogger(),
});
await app.listen(3000);

Extend built-in logger

많은 유스 케이스는 자신의 로거를 작성해야 합니다. 바퀴를 완전히 재발명할 필요는 없습니다. 내장Logger 클래스를 확장하여 기본 구현을 부분적으로 무시하고 super를 사용하여 호출을 부모 클래스에 위임하십시오.

import { Logger } from '@nestjs/common';

export class MyLogger extends Logger {
  error(message: string, trace: string) {
    // add your tailored logic here
    super.error(message, trace);
  }
}

Dependency injection

로거에서 의존성 주입을 활성화하려면 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);

이 솔루션의 유일한 단점은 첫번째 초기화 메시지가 로거 인스턴스에서 처리되지 않지만 실제로는 중요하지 않다는 것입니다.

Last updated