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?