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

Was this helpful?