diff --git a/src/loggers/console.js b/src/loggers/console.js index e6563f9..4e78afc 100644 --- a/src/loggers/console.js +++ b/src/loggers/console.js @@ -30,7 +30,33 @@ class ConsoleLogger { if (levels.indexOf(this._level) > levels.indexOf(level)) { return; } + if (this.hasError(args)) { + // If the arguments contain an error object, send them directly + // to preserve the stack trace. + loggerFn(...this.getParts(level), ...args); + } else { + const [message, ...rest] = args; + // Otherwise wrap the message to allow for variable substitution. + loggerFn(this.wrapMessage(message, level), ...rest); + } + } + + hasError(args) { + return args.some((arg) => { + return arg instanceof Error; + }); + } + + wrapMessage(message, level) { + return [ + ...this.getParts(level), + message, + ].join(' '); + } + + + getParts(level) { let levelStr = level.toUpperCase().padStart(5, " "); if (["warn"].includes(level)) { levelStr = klour.yellow(levelStr); @@ -39,15 +65,14 @@ class ConsoleLogger { } else { levelStr = klour.gray(levelStr); } - - loggerFn( + return [ klour.gray(`[${getLocalDate()}]`), levelStr, ...Object.keys(this.props).map((key) => { return `${key}: ${this.props[key]}`; }), - ...args - ); + ]; + } trace(...args) {