Logger
Nest에는 인스턴스화 프로세스 중에 사용되며 발생한 예외 등과 같은 여러 가지 상황에서 사용되는 내부 Logger
의 기본 구현이 제공됩니다. 그러나 때로는 로깅을 완전히 비활성화하거나 사용자 지정 구현을 제공하고 메시지를 직접 처리 할 수도 있습니다. 로거를 끄려면 Nest의 옵션 객체를 사용합니다.
Copy const app = await NestFactory .create (ApplicationModule , {
logger : false ,
});
await app .listen ( 3000 );
그럼에도 불구하고 전체 로깅 메커니즘을 비활성화 하는 대신 다른 로거를 사용하는 것이 좋습니다. 이를 위해서는 LoggerService
인터페이스를 만족시키는 객체를 전달해야 합니다. 예를 들어 내장 콘솔
이 될 수 있습니다.
Copy const app = await NestFactory .create (ApplicationModule , {
logger : console ,
});
await app .listen ( 3000 );
그러나 적절한 아이디어는 아닙니다. 그러나 자체 로거를 쉽게 만들 수 있습니다.
Copy 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 인스턴스를 직접 적용 할 수 있습니다.
Copy const app = await NestFactory .create (ApplicationModule , {
logger : new MyLogger () ,
});
await app .listen ( 3000 );
Extend built-in logger
많은 유스 케이스는 자신의 로거를 작성해야 합니다. 바퀴를 완전히 재발명할 필요는 없습니다. 내장Logger
클래스를 확장하여 기본 구현을 부분적으로 무시하고 super
를 사용하여 호출을 부모 클래스에 위임하십시오.
Copy 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
을 만들 수 있습니다.
Copy import { Module } from '@nestjs/common' ;
import { MyLogger } from './my-logger.service.ts' ;
@ Module ({
providers : [MyLogger] ,
exports : [MyLogger] ,
})
export class LoggerModule {}
LoggerModule을 어디서나 가져 오면 프레임 워크는 로거 인스턴스 생성을 담당합니다. 이제 부트 스트랩 및 오류 처리를 포함하여 전체 앱에서 동일한 로거 인스턴스를 사용하려면 다음 구성을 사용하십시오.
Copy const app = await NestFactory .create (ApplicationModule , {
logger : false ,
});
app .useLogger ( app .get (MyLogger));
await app .listen ( 3000 );
이 솔루션의 유일한 단점은 첫번째 초기화 메시지가 로거 인스턴스에서 처리되지 않지만 실제로는 중요하지 않다는 것입니다.