From ea3afe1bdf8ee1b6f80b6b108b852063773850b6 Mon Sep 17 00:00:00 2001 From: Izabela Cardoso Date: Thu, 3 Dec 2020 19:15:33 -0300 Subject: [PATCH] Adds option to set origin index --- src/logger-options.ts | 1 + src/logger.ts | 5 ++++- test/logger.spec.ts | 43 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 48 insertions(+), 1 deletion(-) diff --git a/src/logger-options.ts b/src/logger-options.ts index 9591915..500a7be 100644 --- a/src/logger-options.ts +++ b/src/logger-options.ts @@ -2,4 +2,5 @@ export interface LoggerOptions { includeBlackList?: string[]; excludeBlackList?: string[]; whiteList?: string[]; + originIndex?: number; } diff --git a/src/logger.ts b/src/logger.ts index e39f133..7df923e 100644 --- a/src/logger.ts +++ b/src/logger.ts @@ -16,6 +16,8 @@ export class Logger { private readonly level: string; + private readonly originIndex: number; + private readonly filter: LoggerFilter; public constructor(context?: object, options?: LoggerOptions) { @@ -29,6 +31,7 @@ export class Logger { options?.excludeBlackList, options?.whiteList ); + this.originIndex = options?.originIndex ?? 3; } public debug(message: string, extra?: object): void { @@ -72,7 +75,7 @@ export class Logger { } protected getOrigin(): string { - const origin = callSites()[3]; + const origin = callSites()[this.originIndex]; const methodName = origin.getMethodName(); if (methodName !== null) { diff --git a/test/logger.spec.ts b/test/logger.spec.ts index 155988b..c594b15 100644 --- a/test/logger.spec.ts +++ b/test/logger.spec.ts @@ -932,6 +932,49 @@ describe("simple-json-logger", () => { expect(mock).toBeCalledWith(expectedMessage); }); + it("Should log class and method using originIndex stack level", () => { + // given + const context = { + requestId: faker.random.uuid(), + }; + delete process.env.LOG_LEVEL; + const message = faker.lorem.paragraph(); + const mock = jest.fn(); + const extra = { + name: faker.name.findName(), + }; + const expectedMessage = JSON.stringify({ + context, + level: "debug", + datetime: new Date().toISOString(), + message: `TestClass.testMethodCaller(): ${message}`, + extra, + }); + console.debug = mock; + + class TestClass { + private readonly logger: Logger; + + public constructor() { + this.logger = new Logger(context, { originIndex: 4 }); + } + + public testMethod(): void { + this.logger.debug(message, extra); + } + + public testMethodCaller(): void { + this.testMethod(); + } + } + + // when + new TestClass().testMethodCaller(); + + // then + expect(mock).toBeCalledWith(expectedMessage); + }); + it("Should log function name when log from a function", () => { // given const context = {