diff --git a/src/logger/logger.mjs b/src/logger/logger.mjs index 2277f4f7..0723a2c7 100644 --- a/src/logger/logger.mjs +++ b/src/logger/logger.mjs @@ -40,7 +40,13 @@ export const createLogger = ( const timestamp = Date.now(); // Extract message string from Error object or use message as-is - const msg = message instanceof Error ? message.message : message; + let msg; + if (message instanceof Error) { + msg = message.message; + metadata.stack = message.stack; + } else { + msg = message; + } transport({ level, diff --git a/src/logger/transports/console.mjs b/src/logger/transports/console.mjs index 325b2a3c..3dfb7e19 100644 --- a/src/logger/transports/console.mjs +++ b/src/logger/transports/console.mjs @@ -10,7 +10,7 @@ import { prettifyTimestamp } from '../utils/time.mjs'; * @returns {void} */ const console = ({ level, message, timestamp, metadata = {}, module }) => { - const { file } = metadata; + const { file, stack } = metadata; const time = prettifyTimestamp(timestamp); @@ -37,6 +37,10 @@ const console = ({ level, message, timestamp, metadata = {}, module }) => { } process.stdout.write('\n'); + + if (stack) { + process.stdout.write(stack); + } }; export default console; diff --git a/src/logger/types.d.ts b/src/logger/types.d.ts index 3e7fc9c1..32a7a579 100644 --- a/src/logger/types.d.ts +++ b/src/logger/types.d.ts @@ -14,6 +14,8 @@ export interface File { interface Metadata { file?: File; + // Stack trace if the message is an error + stack?: string; } interface TransportContext {