⚠️경북대학교 종합프로젝트2 과제 수행 기록 입니다
저번 user 이메일 인증 서비스편에 이어 오늘부터는 로깅 인프라 구축 업무를 맡게 되었다!
로깅 잘 몰라서..구현 사항 이해부터 난항이었지만..
덕분에 공부도 새로 하고 너무 좋다..
정말로. 진짜로. 🫠
이렇게 프로그램을 가동시키면 LOG ...하고 잔뜩 올라오는 부분이 로그라고 할 수 있다. (당연한 말)
'로깅 인프라 구축'이 어떤 일을 해야하는 건지 감이 오지 않아 조금 자료를 찾아본 다음, 정확하게 내가 할 일을 알기 위해 질문을 잔뜩 드렸다.
nest g [..] logging 으로 로깅 폴더에 들어갈 모듈, 서비스, 컨트롤러를 만들어 준다.
import { Injectable, LoggerService } from '@nestjs/common';
@Injectable()
export class LoggingService implements LoggerService {
log(message: any, ...optionalParams: any[]) {
throw new Error('Method not implemented.');
}
error(message: any, ...optionalParams: any[]) {
throw new Error('Method not implemented.');
}
warn(message: any, ...optionalParams: any[]) {
throw new Error('Method not implemented.');
}
debug(message: any, ...optionalParams: any[]) {
throw new Error('Method not implemented.');
}
verbose(message: any, ...optionalParams: any[]) {
throw new Error('Method not implemented.');
}
}
여기서 LoggerService 인터페이스는 로깅 서비스에 필요한 메서드들을 정의하는 역할을 한다.
Custom implementation
You can provide a custom logger implementation to be used by Nest for system logging by setting the value of the logger property to an object that fulfills theLoggerService interface
. For example, you can tell Nest to use the built-in global JavaScript console object (which implements the LoggerService interface), as follows:
https://docs.nestjs.com/techniques/logger
로깅 서비스에 LoggerService를 상속받으면 자동으로 구현해야하는 인터페이스 함수가 뜨게 된다.
이중 Fatal과 setLogLevel은 현재 사용하지 않는 기능임으로 지워주웠다.
* debug 부터는 함수 이름 뒤에 ? 물음표가 붙어있는데 스크립트 문법의 선택적 프로퍼티라고 한다. (타입스크립트 기준)
즉, 구현해도 되고 구현하지 않아도 되는 함수!
실제로 log, error등은 지우면 구현하라고 빨간줄이 뜨는데 아래 물음표가 붙은 함수들은 지워도 빨간줄이 뜨지 않는다.
✅FATAL : 아주 심각한 에러가 발생한 상태, 시스템적으로 심각한 문제가 발생해서 어플리케이션 작동이 불가능한 경우
✅verbose가 있으면 함수 수행시 발생하는 상세한 정보들을 표준 출력으로 자세히 내보낼 것인가를 나타냅니다
로그 레벨 종류- log4j 로그레벨 참고
먼저 잘 동작되는지 확인하기 위해, throw new Error('Method not implemented.')
; 대신 console.log(message);
로 채워준다.
참고한 코드 출처
@Injectable()
export class AppService {
private readonly logger = new Logger(AppService.name);
private readonly mylogger = new LoggingService();
getHello(): string {
console.log(process.env.NODE_ENV);
this.logger.error('this is error');
this.logger.warn('this is warn');
this.logger.log('this is log');
this.logger.verbose('this is verbose');
this.logger.debug('this is debug');
this.mylogger.error('test');
return 'Hello World!';
}
}
아까 만든 코드가 잘 돌아가는지 확인하기 위해 AppService를 작성해 주었다. 참고한 코드에는 controller나 import관련한 코드를 찾을 수가 없어 임의로 작성하였는데, 코드 참고가 필요하다면 아래 주소를 참고하면 된다.
Git - LoggingController
Git - 전체 구조
출력해보니 각 로그 레벨 별로 잘 출력되고 있다!
+) 이때까지 consol.log만 해서 몰랐는데, logger를 사용하면 아주 알록달록하게 출력이 된다..!!
참고자료
NestJS - Logging
29CM 로그 수집 시스템 소개
[Nest.js]log stream을 db로 전송하기
NestJS에서 로깅(logging)하기