diff --git a/.changeset/itchy-schools-camp.md b/.changeset/itchy-schools-camp.md new file mode 100644 index 0000000000..31b4231a69 --- /dev/null +++ b/.changeset/itchy-schools-camp.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-defaults': patch +--- + +Explicitly stringify extra logger fields with `JSON.stringify` to prevent `[object Object]` errors. diff --git a/packages/backend-defaults/src/entrypoints/rootLogger/WinstonLogger.test.ts b/packages/backend-defaults/src/entrypoints/rootLogger/WinstonLogger.test.ts index ec46f22759..0f9e079943 100644 --- a/packages/backend-defaults/src/entrypoints/rootLogger/WinstonLogger.test.ts +++ b/packages/backend-defaults/src/entrypoints/rootLogger/WinstonLogger.test.ts @@ -93,28 +93,4 @@ describe('WinstonLogger', () => { expect.any(Function), ); }); - - it('gracefully handles fields that are not castable to a string', () => { - const mockTransport = new Transport({ - log: jest.fn(), - logv: jest.fn(), - }); - - const logger = WinstonLogger.create({ - transports: [mockTransport], - }); - - logger.error('something went wrong', { - field: Object.create(null), - }); - - expect(mockTransport.log).toHaveBeenCalledWith( - expect.objectContaining({ - [MESSAGE]: expect.stringContaining( - '[field value not castable to string]', - ), - }), - expect.any(Function), - ); - }); }); diff --git a/packages/backend-defaults/src/entrypoints/rootLogger/WinstonLogger.ts b/packages/backend-defaults/src/entrypoints/rootLogger/WinstonLogger.ts index 9f7532e66b..545c9377b2 100644 --- a/packages/backend-defaults/src/entrypoints/rootLogger/WinstonLogger.ts +++ b/packages/backend-defaults/src/entrypoints/rootLogger/WinstonLogger.ts @@ -151,7 +151,7 @@ export class WinstonLogger implements RootLoggerService { let stringValue = ''; try { - stringValue = `${value}`; + stringValue = JSON.stringify(value); } catch (e) { stringValue = '[field value not castable to string]'; }