From 46431dedc7b831d645fbf654196fe2be00e10665 Mon Sep 17 00:00:00 2001 From: Charly Gomez Date: Wed, 3 Dec 2025 10:12:08 +0100 Subject: [PATCH] add support for msg --- .../pino/scenario-structured-logging.mjs | 13 ++++ .../suites/pino/test.ts | 63 +++++++++++++++++++ packages/node-core/src/integrations/pino.ts | 5 +- 3 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 dev-packages/node-integration-tests/suites/pino/scenario-structured-logging.mjs diff --git a/dev-packages/node-integration-tests/suites/pino/scenario-structured-logging.mjs b/dev-packages/node-integration-tests/suites/pino/scenario-structured-logging.mjs new file mode 100644 index 000000000000..8e3d6b75fb7c --- /dev/null +++ b/dev-packages/node-integration-tests/suites/pino/scenario-structured-logging.mjs @@ -0,0 +1,13 @@ +import * as Sentry from '@sentry/node'; +import pino from 'pino'; + +const logger = pino({ name: 'myapp' }); + +Sentry.withIsolationScope(() => { + Sentry.startSpan({ name: 'startup' }, () => { + // Omitting the message string and using the msg field instead + logger.info({ msg: 'test-msg' }); + logger.info({ msg: 'test-msg-2', userId: 'user-123', action: 'login' }); + logger.info('test-string'); + }); +}); diff --git a/dev-packages/node-integration-tests/suites/pino/test.ts b/dev-packages/node-integration-tests/suites/pino/test.ts index 21cd30bdef60..a0a16c422dc2 100644 --- a/dev-packages/node-integration-tests/suites/pino/test.ts +++ b/dev-packages/node-integration-tests/suites/pino/test.ts @@ -232,4 +232,67 @@ conditionalTest({ min: 20 })('Pino integration', () => { .start() .completed(); }); + + test('captures structured logs with msg field', async () => { + const instrumentPath = join(__dirname, 'instrument.mjs'); + + await createRunner(__dirname, 'scenario-structured-logging.mjs') + .withMockSentryServer() + .withInstrument(instrumentPath) + .ignore('transaction') + .expect({ + log: { + items: [ + { + timestamp: expect.any(Number), + level: 'info', + body: 'test-msg', + trace_id: expect.any(String), + severity_number: 9, + attributes: { + name: { value: 'myapp', type: 'string' }, + 'pino.logger.level': { value: 30, type: 'integer' }, + msg: { value: 'test-msg', type: 'string' }, + 'sentry.origin': { value: 'auto.log.pino', type: 'string' }, + 'sentry.release': { value: '1.0', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + }, + }, + { + timestamp: expect.any(Number), + level: 'info', + body: 'test-msg-2', + trace_id: expect.any(String), + severity_number: 9, + attributes: { + name: { value: 'myapp', type: 'string' }, + 'pino.logger.level': { value: 30, type: 'integer' }, + msg: { value: 'test-msg-2', type: 'string' }, + userId: { value: 'user-123', type: 'string' }, + action: { value: 'login', type: 'string' }, + 'sentry.origin': { value: 'auto.log.pino', type: 'string' }, + 'sentry.release': { value: '1.0', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + }, + }, + { + timestamp: expect.any(Number), + level: 'info', + body: 'test-string', + trace_id: expect.any(String), + severity_number: 9, + attributes: { + name: { value: 'myapp', type: 'string' }, + 'pino.logger.level': { value: 30, type: 'integer' }, + 'sentry.origin': { value: 'auto.log.pino', type: 'string' }, + 'sentry.release': { value: '1.0', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + }, + }, + ], + }, + }) + .start() + .completed(); + }); }); diff --git a/packages/node-core/src/integrations/pino.ts b/packages/node-core/src/integrations/pino.ts index dda9693f90f2..f20d4bae4098 100644 --- a/packages/node-core/src/integrations/pino.ts +++ b/packages/node-core/src/integrations/pino.ts @@ -134,6 +134,7 @@ const _pinoIntegration = defineIntegration((userOptions: DeepPartial = { @@ -142,7 +143,7 @@ const _pinoIntegration = defineIntegration((userOptions: DeepPartial