diff --git a/src/logger/logger-impl/pino-logger.ts b/src/logger/logger-impl/pino-logger.ts index 229106a2..0c4caf97 100644 --- a/src/logger/logger-impl/pino-logger.ts +++ b/src/logger/logger-impl/pino-logger.ts @@ -5,8 +5,16 @@ import type { LogLevel } from '../logger.type'; export class PinoLogger implements Logger { private readonly logger: pino.Logger; - constructor(name: string) { - this.logger = pino({ name, level: 'debug' }); + constructor(name: string); + constructor(args: Record, logger: pino.Logger); + constructor(nameOrArgs: string | Record, logger?: pino.Logger) { + if (typeof nameOrArgs === 'string') { + this.logger = pino({ name: nameOrArgs, level: 'debug' }); + } else if (typeof nameOrArgs === 'object' && logger) { + this.logger = logger.child(nameOrArgs); + } else { + throw new Error('Invalid arguments'); + } } set logLevel(level: LogLevel) { @@ -33,5 +41,13 @@ export class PinoLogger implements Logger { this.logger.error(msgTemplate, ...args); } + child(args: Record): Logger { + return new PinoLogger(args, this.logger); + } + + flat(msgTemplate: string = '', args: Record): void { + this.logger.child(args).debug(msgTemplate); + } + log = this.debug; } diff --git a/src/logger/logger.interface.ts b/src/logger/logger.interface.ts index 6e9165ab..e8b49216 100644 --- a/src/logger/logger.interface.ts +++ b/src/logger/logger.interface.ts @@ -8,4 +8,6 @@ export interface Logger { warn(msgTemplate?: string, ...args: unknown[]): void; error(msgTemplate?: string, ...args: unknown[]): void; log(msgTemplate?: string, ...args: unknown[]): void; + flat(msgTemplate?: string, args?: Record): void; + child(args: Record): Logger; } diff --git a/src/logger/logger.spec.ts b/src/logger/logger.spec.ts index 1ee2fe92..653af003 100644 --- a/src/logger/logger.spec.ts +++ b/src/logger/logger.spec.ts @@ -6,4 +6,8 @@ describe('Logger', () => { const logger2 = LoggerFactory.getLogger('pebbles:logger'); expect(logger1 === logger2).toBe(true); }); + it('child 는 같은 이름이지만 다른 obj', () => { + const logger = LoggerFactory.getLogger('pebbles:logger'); + expect(logger === logger.child({ a: 1 })).toBe(false); + }); });