Skip to content

Commit 3291812

Browse files
authored
src: log error stack trace if provided (#451)
* src: log error stack trace if provided Signed-off-by: flakey5 <[email protected]> * fixup! src: log error stack trace if provided Signed-off-by: flakey5 <[email protected]> --------- Signed-off-by: flakey5 <[email protected]>
1 parent c73cdef commit 3291812

File tree

4 files changed

+19
-4
lines changed

4 files changed

+19
-4
lines changed

src/logger/__tests__/logger.test.mjs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,8 @@ describe('createLogger', () => {
203203

204204
const logger = createLogger(transport, LogLevel.error);
205205

206-
logger.error(new Error('Hello, World!'));
206+
const error = new Error('Hello, World!');
207+
logger.error(error);
207208

208209
strictEqual(transport.mock.callCount(), 1);
209210

@@ -212,7 +213,9 @@ describe('createLogger', () => {
212213
{
213214
level: LogLevel.error,
214215
message: 'Hello, World!',
215-
metadata: {},
216+
metadata: {
217+
stack: error.stack,
218+
},
216219
module: undefined,
217220
timestamp: 0,
218221
},

src/logger/logger.mjs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,13 @@ export const createLogger = (
4040
const timestamp = Date.now();
4141

4242
// Extract message string from Error object or use message as-is
43-
const msg = message instanceof Error ? message.message : message;
43+
let msg;
44+
if (message instanceof Error) {
45+
msg = message.message;
46+
metadata.stack = message.stack;
47+
} else {
48+
msg = message;
49+
}
4450

4551
transport({
4652
level,

src/logger/transports/console.mjs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { prettifyTimestamp } from '../utils/time.mjs';
1010
* @returns {void}
1111
*/
1212
const console = ({ level, message, timestamp, metadata = {}, module }) => {
13-
const { file } = metadata;
13+
const { file, stack } = metadata;
1414

1515
const time = prettifyTimestamp(timestamp);
1616

@@ -37,6 +37,10 @@ const console = ({ level, message, timestamp, metadata = {}, module }) => {
3737
}
3838

3939
process.stdout.write('\n');
40+
41+
if (stack) {
42+
process.stdout.write(stack);
43+
}
4044
};
4145

4246
export default console;

src/logger/types.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ export interface File {
1414

1515
interface Metadata {
1616
file?: File;
17+
// Stack trace if the message is an error
18+
stack?: string;
1719
}
1820

1921
interface TransportContext {

0 commit comments

Comments
 (0)