diff --git a/src/lib/logger.service.spec.ts b/src/lib/logger.service.spec.ts index 6b3a532..afcc2be 100644 --- a/src/lib/logger.service.spec.ts +++ b/src/lib/logger.service.spec.ts @@ -36,10 +36,17 @@ describe('NGXLogger', () => { [NGXLogger], (logger: NGXLogger) => { const logSpy = spyOn(logger, '_log'); - - logger.trace('message'); - - expect(logSpy).toHaveBeenCalledWith(NgxLoggerLevel.TRACE, 'message', []); + const messageString = 'message'; + + logger.trace(messageString); + const _testStackError = new Error(); + _testStackError.name = messageString; + + expect(logSpy).toHaveBeenCalled(); + expect(logSpy.calls.argsFor(0)[0]).toBe(NgxLoggerLevel.TRACE); + // We can't test the exact stack trace so we only make sure the message is included + expect(logSpy.calls.argsFor(0)[1]).toContain(messageString); + expect(logSpy.calls.argsFor(0)[2]).toEqual([]); } )); }); diff --git a/src/lib/logger.service.ts b/src/lib/logger.service.ts index 6fbb9cf..d1d0d07 100644 --- a/src/lib/logger.service.ts +++ b/src/lib/logger.service.ts @@ -42,7 +42,12 @@ export class NGXLogger { } public trace(message?: any | (() => any), ...additional: any[]): void { - this._log(NgxLoggerLevel.TRACE, message, additional); + // We manually set the stack trace using a dummy Error. + // This is done instead of using console.trace in _log method to ensure the stack trace is kept at the highest level possible. + // If the dummy error has no stack, we default to printing only the message and additional parameters. + const _traceDummyError = new Error(); + _traceDummyError.name = message; + this._log(NgxLoggerLevel.TRACE, _traceDummyError.stack || message, additional); } public debug(message?: any | (() => any), ...additional: any[]): void {