From 5e7fd8bf336c335869890c2e019f8555d4111809 Mon Sep 17 00:00:00 2001 From: rocio Date: Wed, 7 Aug 2024 10:53:28 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat=20:=20pino=20child=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/logger/logger-impl/pino-logger.ts | 4 +++- src/logger/logger.interface.ts | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/logger/logger-impl/pino-logger.ts b/src/logger/logger-impl/pino-logger.ts index 229106a2..7561f203 100644 --- a/src/logger/logger-impl/pino-logger.ts +++ b/src/logger/logger-impl/pino-logger.ts @@ -32,6 +32,8 @@ export class PinoLogger implements Logger { error(msgTemplate = '', ...args: unknown[]): void { this.logger.error(msgTemplate, ...args); } - + child(options: Record): pino.Logger { + return this.logger.child(options); + } log = this.debug; } diff --git a/src/logger/logger.interface.ts b/src/logger/logger.interface.ts index 6e9165ab..5d92d5b2 100644 --- a/src/logger/logger.interface.ts +++ b/src/logger/logger.interface.ts @@ -1,3 +1,4 @@ +import pino from 'pino'; import type { LogLevel } from './logger.type'; export interface Logger { @@ -8,4 +9,5 @@ export interface Logger { warn(msgTemplate?: string, ...args: unknown[]): void; error(msgTemplate?: string, ...args: unknown[]): void; log(msgTemplate?: string, ...args: unknown[]): void; + child(options: Record): pino.Logger; } From 685baf23a160bd863fdcf77c7a28f34e85497cfa Mon Sep 17 00:00:00 2001 From: rocio Date: Wed, 7 Aug 2024 20:35:27 +0900 Subject: [PATCH 2/2] feat : overloading and flat --- src/logger/logger-impl/pino-logger.ts | 22 ++++++++++++++++++---- src/logger/logger.interface.ts | 4 ++-- src/logger/logger.spec.ts | 4 ++++ 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/logger/logger-impl/pino-logger.ts b/src/logger/logger-impl/pino-logger.ts index 7561f203..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) { @@ -32,8 +40,14 @@ export class PinoLogger implements Logger { error(msgTemplate = '', ...args: unknown[]): void { this.logger.error(msgTemplate, ...args); } - child(options: Record): pino.Logger { - return this.logger.child(options); + + 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 5d92d5b2..e8b49216 100644 --- a/src/logger/logger.interface.ts +++ b/src/logger/logger.interface.ts @@ -1,4 +1,3 @@ -import pino from 'pino'; import type { LogLevel } from './logger.type'; export interface Logger { @@ -9,5 +8,6 @@ export interface Logger { warn(msgTemplate?: string, ...args: unknown[]): void; error(msgTemplate?: string, ...args: unknown[]): void; log(msgTemplate?: string, ...args: unknown[]): void; - child(options: Record): pino.Logger; + 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); + }); });