diff --git a/dev-packages/node-integration-tests/suites/consola/instrument.mjs b/dev-packages/node-integration-tests/suites/consola/instrument.mjs new file mode 100644 index 000000000000..938f870a3b89 --- /dev/null +++ b/dev-packages/node-integration-tests/suites/consola/instrument.mjs @@ -0,0 +1,10 @@ +import * as Sentry from '@sentry/node'; +import { loggingTransport } from '@sentry-internal/node-integration-tests'; + +Sentry.init({ + dsn: 'https://public@dsn.ingest.sentry.io/1337', + release: '1.0.0', + environment: 'test', + enableLogs: true, + transport: loggingTransport, +}); diff --git a/dev-packages/node-integration-tests/suites/consola/subject-args.ts b/dev-packages/node-integration-tests/suites/consola/scenario-args.mjs similarity index 72% rename from dev-packages/node-integration-tests/suites/consola/subject-args.ts rename to dev-packages/node-integration-tests/suites/consola/scenario-args.mjs index 11b39d1588cb..1eb3ed2b5fcb 100644 --- a/dev-packages/node-integration-tests/suites/consola/subject-args.ts +++ b/dev-packages/node-integration-tests/suites/consola/scenario-args.mjs @@ -1,16 +1,7 @@ import * as Sentry from '@sentry/node'; -import { loggingTransport } from '@sentry-internal/node-integration-tests'; import { consola } from 'consola'; -Sentry.init({ - dsn: 'https://public@dsn.ingest.sentry.io/1337', - release: '1.0.0', - environment: 'test', - enableLogs: true, - transport: loggingTransport, -}); - -async function run(): Promise { +async function run() { // Set consola level to capture all logs including debug and trace consola.level = 5; diff --git a/dev-packages/node-integration-tests/suites/consola/subject-custom-levels.ts b/dev-packages/node-integration-tests/suites/consola/scenario-custom-levels.mjs similarity index 67% rename from dev-packages/node-integration-tests/suites/consola/subject-custom-levels.ts rename to dev-packages/node-integration-tests/suites/consola/scenario-custom-levels.mjs index 3f3690f7d110..4510f25e31b3 100644 --- a/dev-packages/node-integration-tests/suites/consola/subject-custom-levels.ts +++ b/dev-packages/node-integration-tests/suites/consola/scenario-custom-levels.mjs @@ -1,16 +1,7 @@ import * as Sentry from '@sentry/node'; -import { loggingTransport } from '@sentry-internal/node-integration-tests'; import { consola } from 'consola'; -Sentry.init({ - dsn: 'https://public@dsn.ingest.sentry.io/1337', - release: '1.0.0', - environment: 'test', - enableLogs: true, - transport: loggingTransport, -}); - -async function run(): Promise { +async function run() { // Test custom levels filtering const customReporter = Sentry.createConsolaReporter({ levels: ['error', 'warn'], // Only capture errors and warnings diff --git a/dev-packages/node-integration-tests/suites/consola/subject-levels.ts b/dev-packages/node-integration-tests/suites/consola/scenario-levels.mjs similarity index 70% rename from dev-packages/node-integration-tests/suites/consola/subject-levels.ts rename to dev-packages/node-integration-tests/suites/consola/scenario-levels.mjs index 02052febfb65..bbf62e650794 100644 --- a/dev-packages/node-integration-tests/suites/consola/subject-levels.ts +++ b/dev-packages/node-integration-tests/suites/consola/scenario-levels.mjs @@ -1,16 +1,7 @@ import * as Sentry from '@sentry/node'; -import { loggingTransport } from '@sentry-internal/node-integration-tests'; import { consola } from 'consola'; -Sentry.init({ - dsn: 'https://public@dsn.ingest.sentry.io/1337', - release: '1.0.0', - environment: 'test', - enableLogs: true, - transport: loggingTransport, -}); - -async function run(): Promise { +async function run() { // Set consola level to capture all logs including debug and trace consola.level = 5; diff --git a/dev-packages/node-integration-tests/suites/consola/subject-object-first.ts b/dev-packages/node-integration-tests/suites/consola/scenario-object-first.mjs similarity index 69% rename from dev-packages/node-integration-tests/suites/consola/subject-object-first.ts rename to dev-packages/node-integration-tests/suites/consola/scenario-object-first.mjs index 05443b924ab8..c0e2896161db 100644 --- a/dev-packages/node-integration-tests/suites/consola/subject-object-first.ts +++ b/dev-packages/node-integration-tests/suites/consola/scenario-object-first.mjs @@ -1,16 +1,7 @@ import * as Sentry from '@sentry/node'; -import { loggingTransport } from '@sentry-internal/node-integration-tests'; import { consola } from 'consola'; -Sentry.init({ - dsn: 'https://public@dsn.ingest.sentry.io/1337', - release: '1.0.0', - environment: 'test', - enableLogs: true, - transport: loggingTransport, -}); - -async function run(): Promise { +async function run() { consola.level = 5; const sentryReporter = Sentry.createConsolaReporter(); consola.addReporter(sentryReporter); diff --git a/dev-packages/node-integration-tests/suites/consola/subject-tags.ts b/dev-packages/node-integration-tests/suites/consola/scenario-tags.mjs similarity index 69% rename from dev-packages/node-integration-tests/suites/consola/subject-tags.ts rename to dev-packages/node-integration-tests/suites/consola/scenario-tags.mjs index ca458a68a068..2ccb42226075 100644 --- a/dev-packages/node-integration-tests/suites/consola/subject-tags.ts +++ b/dev-packages/node-integration-tests/suites/consola/scenario-tags.mjs @@ -1,16 +1,7 @@ import * as Sentry from '@sentry/node'; -import { loggingTransport } from '@sentry-internal/node-integration-tests'; import { consola } from 'consola'; -Sentry.init({ - dsn: 'https://public@dsn.ingest.sentry.io/1337', - release: '1.0.0', - environment: 'test', - enableLogs: true, - transport: loggingTransport, -}); - -async function run(): Promise { +async function run() { // Set consola level to capture all logs including debug and trace consola.level = 5; diff --git a/dev-packages/node-integration-tests/suites/consola/subject-types.ts b/dev-packages/node-integration-tests/suites/consola/scenario-types.mjs similarity index 78% rename from dev-packages/node-integration-tests/suites/consola/subject-types.ts rename to dev-packages/node-integration-tests/suites/consola/scenario-types.mjs index fc63c38cf614..8ff44da17dda 100644 --- a/dev-packages/node-integration-tests/suites/consola/subject-types.ts +++ b/dev-packages/node-integration-tests/suites/consola/scenario-types.mjs @@ -1,16 +1,7 @@ import * as Sentry from '@sentry/node'; -import { loggingTransport } from '@sentry-internal/node-integration-tests'; import { consola } from 'consola'; -Sentry.init({ - dsn: 'https://public@dsn.ingest.sentry.io/1337', - release: '1.0.0', - environment: 'test', - enableLogs: true, - transport: loggingTransport, -}); - -async function run(): Promise { +async function run() { // Set consola level to capture all logs including debug, trace, and verbose consola.level = Number.POSITIVE_INFINITY; diff --git a/dev-packages/node-integration-tests/suites/consola/subject.ts b/dev-packages/node-integration-tests/suites/consola/scenario.mjs similarity index 68% rename from dev-packages/node-integration-tests/suites/consola/subject.ts rename to dev-packages/node-integration-tests/suites/consola/scenario.mjs index 834aac57d993..724de81d2ed9 100644 --- a/dev-packages/node-integration-tests/suites/consola/subject.ts +++ b/dev-packages/node-integration-tests/suites/consola/scenario.mjs @@ -1,16 +1,7 @@ import * as Sentry from '@sentry/node'; -import { loggingTransport } from '@sentry-internal/node-integration-tests'; import { consola } from 'consola'; -Sentry.init({ - dsn: 'https://public@dsn.ingest.sentry.io/1337', - release: '1.0.0', - environment: 'test', - enableLogs: true, - transport: loggingTransport, -}); - -async function run(): Promise { +async function run() { // Set consola level to capture all logs including debug and trace consola.level = 5; diff --git a/dev-packages/node-integration-tests/suites/consola/test.ts b/dev-packages/node-integration-tests/suites/consola/test.ts index 5f5028278e47..aee250967e64 100644 --- a/dev-packages/node-integration-tests/suites/consola/test.ts +++ b/dev-packages/node-integration-tests/suites/consola/test.ts @@ -1,545 +1,559 @@ -import { afterAll, describe, expect, test } from 'vitest'; -import { cleanupChildProcesses, createRunner } from '../../utils/runner'; +import { afterAll, describe, expect } from 'vitest'; +import { cleanupChildProcesses, createCjsTests } from '../../utils/runner'; describe('consola integration', () => { afterAll(() => { cleanupChildProcesses(); }); - test('should capture consola logs with default levels', async () => { - const runner = createRunner(__dirname, 'subject.ts') - .expect({ - log: { - items: [ - { - timestamp: expect.any(Number), - level: 'info', - body: 'Test info message', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, - 'consola.type': { value: 'info', type: 'string' }, - 'consola.level': { value: 3, type: 'integer' }, + createCjsTests(__dirname, 'scenario.mjs', 'instrument.mjs', (createRunner, test) => { + test('should capture consola logs with default levels', async () => { + const runner = createRunner() + .expect({ + log: { + items: [ + { + timestamp: expect.any(Number), + level: 'info', + body: 'Test info message', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + 'consola.type': { value: 'info', type: 'string' }, + 'consola.level': { value: 3, type: 'integer' }, + }, }, - }, - { - timestamp: expect.any(Number), - level: 'error', - body: 'Test error message', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, - 'consola.type': { value: 'error', type: 'string' }, - 'consola.level': { value: 0, type: 'integer' }, + { + timestamp: expect.any(Number), + level: 'error', + body: 'Test error message', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + 'consola.type': { value: 'error', type: 'string' }, + 'consola.level': { value: 0, type: 'integer' }, + }, }, - }, - { - timestamp: expect.any(Number), - level: 'warn', - body: 'Test warn message', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, - 'consola.type': { value: 'warn', type: 'string' }, - 'consola.level': { value: 1, type: 'integer' }, + { + timestamp: expect.any(Number), + level: 'warn', + body: 'Test warn message', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + 'consola.type': { value: 'warn', type: 'string' }, + 'consola.level': { value: 1, type: 'integer' }, + }, }, - }, - ], - }, - }) - .start(); + ], + }, + }) + .start(); - await runner.completed(); + await runner.completed(); + }); }); - test('should capture different consola log types', async () => { - const runner = createRunner(__dirname, 'subject-types.ts') - .expect({ - log: { - items: [ - // Basic logs from default test - { - timestamp: expect.any(Number), - level: 'info', - body: 'Test info message', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, - 'consola.type': { value: 'info', type: 'string' }, - 'consola.level': { value: 3, type: 'integer' }, + createCjsTests(__dirname, 'scenario-types.mjs', 'instrument.mjs', (createRunner, test) => { + test('should capture different consola log types', async () => { + const runner = createRunner() + .expect({ + log: { + items: [ + // Basic logs from default test + { + timestamp: expect.any(Number), + level: 'info', + body: 'Test info message', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + 'consola.type': { value: 'info', type: 'string' }, + 'consola.level': { value: 3, type: 'integer' }, + }, }, - }, - { - timestamp: expect.any(Number), - level: 'error', - body: 'Test error message', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, - 'consola.type': { value: 'error', type: 'string' }, - 'consola.level': { value: 0, type: 'integer' }, + { + timestamp: expect.any(Number), + level: 'error', + body: 'Test error message', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + 'consola.type': { value: 'error', type: 'string' }, + 'consola.level': { value: 0, type: 'integer' }, + }, }, - }, - { - timestamp: expect.any(Number), - level: 'warn', - body: 'Test warn message', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, - 'consola.type': { value: 'warn', type: 'string' }, - 'consola.level': { value: 1, type: 'integer' }, + { + timestamp: expect.any(Number), + level: 'warn', + body: 'Test warn message', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + 'consola.type': { value: 'warn', type: 'string' }, + 'consola.level': { value: 1, type: 'integer' }, + }, }, - }, - // Consola-specific log types - { - timestamp: expect.any(Number), - level: 'info', - body: 'Test success message', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, - 'consola.type': { value: 'success', type: 'string' }, - 'consola.level': { value: 3, type: 'integer' }, + // Consola-specific log types + { + timestamp: expect.any(Number), + level: 'info', + body: 'Test success message', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + 'consola.type': { value: 'success', type: 'string' }, + 'consola.level': { value: 3, type: 'integer' }, + }, }, - }, - { - timestamp: expect.any(Number), - level: 'error', - body: 'Test fail message', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, - 'consola.type': { value: 'fail', type: 'string' }, - 'consola.level': { value: 3, type: 'integer' }, + { + timestamp: expect.any(Number), + level: 'error', + body: 'Test fail message', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + 'consola.type': { value: 'fail', type: 'string' }, + 'consola.level': { value: 3, type: 'integer' }, + }, }, - }, - { - timestamp: expect.any(Number), - level: 'info', - body: 'Test ready message', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, - 'consola.type': { value: 'ready', type: 'string' }, - 'consola.level': { value: 3, type: 'integer' }, + { + timestamp: expect.any(Number), + level: 'info', + body: 'Test ready message', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + 'consola.type': { value: 'ready', type: 'string' }, + 'consola.level': { value: 3, type: 'integer' }, + }, }, - }, - { - timestamp: expect.any(Number), - level: 'info', - body: 'Test start message', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, - 'consola.type': { value: 'start', type: 'string' }, - 'consola.level': { value: 3, type: 'integer' }, + { + timestamp: expect.any(Number), + level: 'info', + body: 'Test start message', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + 'consola.type': { value: 'start', type: 'string' }, + 'consola.level': { value: 3, type: 'integer' }, + }, }, - }, - { - timestamp: expect.any(Number), - level: 'info', - body: 'Test box message', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, - 'consola.type': { value: 'box', type: 'string' }, - 'consola.level': { value: 3, type: 'integer' }, + { + timestamp: expect.any(Number), + level: 'info', + body: 'Test box message', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + 'consola.type': { value: 'box', type: 'string' }, + 'consola.level': { value: 3, type: 'integer' }, + }, }, - }, - { - timestamp: expect.any(Number), - level: 'debug', - body: 'Test verbose message', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, - 'consola.type': { value: 'verbose', type: 'string' }, + { + timestamp: expect.any(Number), + level: 'debug', + body: 'Test verbose message', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + 'consola.type': { value: 'verbose', type: 'string' }, + }, }, - }, - { - timestamp: expect.any(Number), - level: 'debug', - body: 'Test debug message', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, - 'consola.type': { value: 'debug', type: 'string' }, - 'consola.level': { value: 4, type: 'integer' }, + { + timestamp: expect.any(Number), + level: 'debug', + body: 'Test debug message', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + 'consola.type': { value: 'debug', type: 'string' }, + 'consola.level': { value: 4, type: 'integer' }, + }, }, - }, - { - timestamp: expect.any(Number), - level: 'trace', - body: 'Test trace message', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, - 'consola.type': { value: 'trace', type: 'string' }, - 'consola.level': { value: 5, type: 'integer' }, + { + timestamp: expect.any(Number), + level: 'trace', + body: 'Test trace message', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + 'consola.type': { value: 'trace', type: 'string' }, + 'consola.level': { value: 5, type: 'integer' }, + }, }, - }, - ], - }, - }) - .start(); + ], + }, + }) + .start(); - await runner.completed(); + await runner.completed(); + }); }); - test('should capture consola logs with arguments formatting', async () => { - const runner = createRunner(__dirname, 'subject-args.ts') - .expect({ - log: { - items: [ - { - timestamp: expect.any(Number), - level: 'info', - body: 'Message with args: hello 123 {"key":"value"} [1,2,3]', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, - 'consola.type': { value: 'info', type: 'string' }, - 'consola.level': { value: 3, type: 'integer' }, - }, - }, - { - timestamp: expect.any(Number), - level: 'debug', - body: 'Debug message', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, - 'consola.type': { value: 'debug', type: 'string' }, - 'consola.level': { value: 2, type: 'integer' }, - customData: { - value: '{"nested":"value","count":42}', - type: 'string', + createCjsTests(__dirname, 'scenario-args.mjs', 'instrument.mjs', (createRunner, test) => { + test('should capture consola logs with arguments formatting', async () => { + const runner = createRunner() + .expect({ + log: { + items: [ + { + timestamp: expect.any(Number), + level: 'info', + body: 'Message with args: hello 123 {"key":"value"} [1,2,3]', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + 'consola.type': { value: 'info', type: 'string' }, + 'consola.level': { value: 3, type: 'integer' }, }, - sessionId: { - value: 'abc-123-def', - type: 'string', - }, - userId: { - value: 12345, - type: 'integer', + }, + { + timestamp: expect.any(Number), + level: 'debug', + body: 'Debug message', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + 'consola.type': { value: 'debug', type: 'string' }, + 'consola.level': { value: 2, type: 'integer' }, + customData: { + value: '{"nested":"value","count":42}', + type: 'string', + }, + sessionId: { + value: 'abc-123-def', + type: 'string', + }, + userId: { + value: 12345, + type: 'integer', + }, }, }, - }, - ], - }, - }) - .start(); + ], + }, + }) + .start(); - await runner.completed(); + await runner.completed(); + }); }); - test('should capture consola logs with tags', async () => { - const runner = createRunner(__dirname, 'subject-tags.ts') - .expect({ - log: { - items: [ - { - timestamp: expect.any(Number), - level: 'info', - body: 'Tagged info message', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, - 'consola.tag': { value: 'api', type: 'string' }, - 'consola.type': { value: 'info', type: 'string' }, - 'consola.level': { value: 3, type: 'integer' }, + createCjsTests(__dirname, 'scenario-tags.mjs', 'instrument.mjs', (createRunner, test) => { + test('should capture consola logs with tags', async () => { + const runner = createRunner() + .expect({ + log: { + items: [ + { + timestamp: expect.any(Number), + level: 'info', + body: 'Tagged info message', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + 'consola.tag': { value: 'api', type: 'string' }, + 'consola.type': { value: 'info', type: 'string' }, + 'consola.level': { value: 3, type: 'integer' }, + }, }, - }, - { - timestamp: expect.any(Number), - level: 'error', - body: 'Tagged error message', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, - 'consola.tag': { value: 'api', type: 'string' }, - 'consola.type': { value: 'error', type: 'string' }, - 'consola.level': { value: 0, type: 'integer' }, + { + timestamp: expect.any(Number), + level: 'error', + body: 'Tagged error message', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + 'consola.tag': { value: 'api', type: 'string' }, + 'consola.type': { value: 'error', type: 'string' }, + 'consola.level': { value: 0, type: 'integer' }, + }, }, - }, - ], - }, - }) - .start(); + ], + }, + }) + .start(); - await runner.completed(); + await runner.completed(); + }); }); - test('should respect custom level filtering', async () => { - const runner = createRunner(__dirname, 'subject-custom-levels.ts') - .expect({ - log: { - items: [ - // Should capture the warn message - { - timestamp: expect.any(Number), - level: 'warn', - body: 'This should be captured', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, - 'consola.type': { value: 'warn', type: 'string' }, - 'consola.level': { value: 1, type: 'integer' }, + createCjsTests(__dirname, 'scenario-custom-levels.mjs', 'instrument.mjs', (createRunner, test) => { + test('should respect custom level filtering', async () => { + const runner = createRunner() + .expect({ + log: { + items: [ + // Should capture the warn message + { + timestamp: expect.any(Number), + level: 'warn', + body: 'This should be captured', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + 'consola.type': { value: 'warn', type: 'string' }, + 'consola.level': { value: 1, type: 'integer' }, + }, }, - }, - // Should capture the error message - { - timestamp: expect.any(Number), - level: 'error', - body: 'This should also be captured', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, - 'consola.type': { value: 'error', type: 'string' }, - 'consola.level': { value: 0, type: 'integer' }, + // Should capture the error message + { + timestamp: expect.any(Number), + level: 'error', + body: 'This should also be captured', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + 'consola.type': { value: 'error', type: 'string' }, + 'consola.level': { value: 0, type: 'integer' }, + }, }, - }, - ], - }, - }) - .start(); + ], + }, + }) + .start(); - await runner.completed(); + await runner.completed(); + }); }); - test('should capture different consola level methods', async () => { - const runner = createRunner(__dirname, 'subject-levels.ts') - .expect({ - log: { - items: [ - { - timestamp: expect.any(Number), - level: 'fatal', - body: 'Fatal level message', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, - 'consola.type': { value: 'fatal', type: 'string' }, - 'consola.level': { value: 0, type: 'integer' }, + createCjsTests(__dirname, 'scenario-levels.mjs', 'instrument.mjs', (createRunner, test) => { + test('should capture different consola level methods', async () => { + const runner = createRunner() + .expect({ + log: { + items: [ + { + timestamp: expect.any(Number), + level: 'fatal', + body: 'Fatal level message', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + 'consola.type': { value: 'fatal', type: 'string' }, + 'consola.level': { value: 0, type: 'integer' }, + }, }, - }, - { - timestamp: expect.any(Number), - level: 'warn', - body: 'Warning level message', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, - 'consola.type': { value: 'warn', type: 'string' }, - 'consola.level': { value: 1, type: 'integer' }, + { + timestamp: expect.any(Number), + level: 'warn', + body: 'Warning level message', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + 'consola.type': { value: 'warn', type: 'string' }, + 'consola.level': { value: 1, type: 'integer' }, + }, }, - }, - { - timestamp: expect.any(Number), - level: 'info', - body: 'Info level message', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, - 'consola.type': { value: 'info', type: 'string' }, - 'consola.level': { value: 3, type: 'integer' }, + { + timestamp: expect.any(Number), + level: 'info', + body: 'Info level message', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + 'consola.type': { value: 'info', type: 'string' }, + 'consola.level': { value: 3, type: 'integer' }, + }, }, - }, - ], - }, - }) - .start(); + ], + }, + }) + .start(); - await runner.completed(); + await runner.completed(); + }); }); - test('should capture object-first consola logs (object as first arg)', async () => { - const runner = createRunner(__dirname, 'subject-object-first.ts') - .expect({ - log: { - items: [ - { - timestamp: expect.any(Number), - level: 'info', - body: '{"userId":100,"action":"login"} User logged in', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, - 'consola.type': { value: 'info', type: 'string' }, - 'consola.level': { value: 3, type: 'integer' }, - userId: { value: 100, type: 'integer' }, - action: { value: 'login', type: 'string' }, + createCjsTests(__dirname, 'scenario-object-first.mjs', 'instrument.mjs', (createRunner, test) => { + test('should capture object-first consola logs (object as first arg)', async () => { + const runner = createRunner() + .expect({ + log: { + items: [ + { + timestamp: expect.any(Number), + level: 'info', + body: '{"userId":100,"action":"login"} User logged in', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + 'consola.type': { value: 'info', type: 'string' }, + 'consola.level': { value: 3, type: 'integer' }, + userId: { value: 100, type: 'integer' }, + action: { value: 'login', type: 'string' }, + }, }, - }, - { - timestamp: expect.any(Number), - level: 'info', - body: '{"event":"click","count":2}', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, - 'consola.type': { value: 'info', type: 'string' }, - 'consola.level': { value: 3, type: 'integer' }, - event: { value: 'click', type: 'string' }, - count: { value: 2, type: 'integer' }, + { + timestamp: expect.any(Number), + level: 'info', + body: '{"event":"click","count":2}', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.consola', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + 'consola.type': { value: 'info', type: 'string' }, + 'consola.level': { value: 3, type: 'integer' }, + event: { value: 'click', type: 'string' }, + count: { value: 2, type: 'integer' }, + }, }, - }, - ], - }, - }) - .start(); + ], + }, + }) + .start(); - await runner.completed(); + await runner.completed(); + }); }); }); diff --git a/dev-packages/node-integration-tests/suites/pino/test.ts b/dev-packages/node-integration-tests/suites/pino/test.ts index 9de7e1bc79b1..9ed6f77e4175 100644 --- a/dev-packages/node-integration-tests/suites/pino/test.ts +++ b/dev-packages/node-integration-tests/suites/pino/test.ts @@ -1,441 +1,435 @@ -import { join } from 'path'; -import { expect, test } from 'vitest'; +import { afterAll, expect } from 'vitest'; import { conditionalTest } from '../../utils'; -import { createRunner } from '../../utils/runner'; +import { cleanupChildProcesses, createEsmTests } from '../../utils/runner'; conditionalTest({ min: 20 })('Pino integration', () => { - test('has different trace ids for logs from different spans', async () => { - const instrumentPath = join(__dirname, 'instrument.mjs'); - - await createRunner(__dirname, 'scenario.mjs') - .withMockSentryServer() - .withInstrument(instrumentPath) - .ignore('event') - .ignore('transaction') - .expect({ - log: log => { - const traceId1 = log.items?.[0]?.trace_id; - const traceId2 = log.items?.[1]?.trace_id; - expect(traceId1).not.toBe(traceId2); - }, - }) - .start() - .completed(); + afterAll(() => { + cleanupChildProcesses(); }); - test('captures event and logs', async () => { - const instrumentPath = join(__dirname, 'instrument.mjs'); + createEsmTests(__dirname, 'scenario.mjs', 'instrument.mjs', (createRunner, test) => { + test('has different trace ids for logs from different spans', async () => { + await createRunner() + .withMockSentryServer() + .ignore('event') + .ignore('transaction') + .expect({ + log: log => { + const traceId1 = log.items?.[0]?.trace_id; + const traceId2 = log.items?.[1]?.trace_id; + expect(traceId1).not.toBe(traceId2); + }, + }) + .start() + .completed(); + }); - await createRunner(__dirname, 'scenario.mjs') - .withMockSentryServer() - .withInstrument(instrumentPath) - .ignore('transaction') - .expect({ - event: { - exception: { - values: [ + test('captures event and logs', async () => { + await createRunner() + .withMockSentryServer() + .ignore('transaction') + .expect({ + event: { + exception: { + values: [ + { + type: 'Error', + value: 'oh no', + mechanism: { + type: 'auto.log.pino', + handled: true, + }, + stacktrace: { + frames: expect.arrayContaining([ + expect.objectContaining({ + function: '?', + in_app: true, + module: 'scenario', + }), + ]), + }, + }, + ], + }, + contexts: { + pino: { + name: 'myapp', + module: 'authentication', + msg: 'oh no', + }, + }, + }, + }) + .expect({ + log: { + items: [ { - type: 'Error', - value: 'oh no', - mechanism: { - type: 'auto.log.pino', - handled: true, + timestamp: expect.any(Number), + level: 'info', + body: 'hello world', + trace_id: expect.any(String), + severity_number: 9, + attributes: { + name: { value: 'myapp', type: 'string' }, + 'pino.logger.level': { value: 30, type: 'integer' }, + user: { value: 'user-id', type: 'string' }, + something: { + type: 'string', + value: '{"more":3,"complex":"nope"}', + }, + 'sentry.origin': { value: 'auto.log.pino', type: 'string' }, + 'sentry.release': { value: '1.0', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, }, - stacktrace: { - frames: expect.arrayContaining([ - expect.objectContaining({ - function: '?', - in_app: true, - module: 'scenario', - }), - ]), + }, + { + timestamp: expect.any(Number), + level: 'error', + body: 'oh no', + trace_id: expect.any(String), + severity_number: 17, + attributes: { + name: { value: 'myapp', type: 'string' }, + module: { value: 'authentication', type: 'string' }, + msg: { value: 'oh no', type: 'string' }, + err: { value: expect.any(String), type: 'string' }, + 'pino.logger.level': { value: 50, 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' }, }, }, ], }, - contexts: { - pino: { - name: 'myapp', - module: 'authentication', - msg: 'oh no', - }, - }, - }, - }) - .expect({ - log: { - items: [ - { - timestamp: expect.any(Number), - level: 'info', - body: 'hello world', - trace_id: expect.any(String), - severity_number: 9, - attributes: { - name: { value: 'myapp', type: 'string' }, - 'pino.logger.level': { value: 30, type: 'integer' }, - user: { value: 'user-id', type: 'string' }, - something: { - type: 'string', - value: '{"more":3,"complex":"nope"}', + }) + .start() + .completed(); + }); + }); + + createEsmTests(__dirname, 'scenario-next.mjs', 'instrument.mjs', (createRunner, test) => { + test('captures with Pino integrated channel', async () => { + await createRunner() + .withMockSentryServer() + .ignore('transaction') + .expect({ + event: { + exception: { + values: [ + { + type: 'Error', + value: 'oh no', + mechanism: { + type: 'auto.log.pino', + handled: true, + }, + stacktrace: { + frames: expect.arrayContaining([ + expect.objectContaining({ + function: '?', + in_app: true, + module: 'scenario-next', + context_line: " logger.error(new Error('oh no'));", + }), + ]), + }, }, - '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: 'error', - body: 'oh no', - trace_id: expect.any(String), - severity_number: 17, - attributes: { - name: { value: 'myapp', type: 'string' }, - module: { value: 'authentication', type: 'string' }, - msg: { value: 'oh no', type: 'string' }, - err: { value: expect.any(String), type: 'string' }, - 'pino.logger.level': { value: 50, 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' }, + contexts: { + pino: { + name: 'myapp', + msg: 'oh no', }, }, - ], - }, - }) - .start() - .completed(); - }); - - test('captures with Pino integrated channel', async () => { - const instrumentPath = join(__dirname, 'instrument.mjs'); - - await createRunner(__dirname, 'scenario-next.mjs') - .withMockSentryServer() - .withInstrument(instrumentPath) - .ignore('transaction') - .expect({ - event: { - exception: { - values: [ + }, + }) + .expect({ + log: { + items: [ { - type: 'Error', - value: 'oh no', - mechanism: { - type: 'auto.log.pino', - handled: true, + timestamp: expect.any(Number), + level: 'info', + body: 'hello world', + trace_id: expect.any(String), + severity_number: 9, + attributes: { + name: { value: 'myapp', type: 'string' }, + 'pino.logger.level': { value: 30, type: 'integer' }, + user: { value: 'user-id', type: 'string' }, + something: { + type: 'string', + value: '{"more":3,"complex":"nope"}', + }, + 'sentry.origin': { value: 'auto.log.pino', type: 'string' }, + 'sentry.release': { value: '1.0', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, }, - stacktrace: { - frames: expect.arrayContaining([ - expect.objectContaining({ - function: '?', - in_app: true, - module: 'scenario-next', - context_line: " logger.error(new Error('oh no'));", - }), - ]), + }, + { + timestamp: expect.any(Number), + level: 'error', + body: 'oh no', + trace_id: expect.any(String), + severity_number: 17, + attributes: { + name: { value: 'myapp', type: 'string' }, + msg: { value: 'oh no', type: 'string' }, + err: { value: expect.any(String), type: 'string' }, + 'pino.logger.level': { value: 50, 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' }, }, }, ], }, - contexts: { - pino: { - name: 'myapp', - msg: 'oh no', - }, - }, - }, - }) - .expect({ - log: { - items: [ - { - timestamp: expect.any(Number), - level: 'info', - body: 'hello world', - trace_id: expect.any(String), - severity_number: 9, - attributes: { - name: { value: 'myapp', type: 'string' }, - 'pino.logger.level': { value: 30, type: 'integer' }, - user: { value: 'user-id', type: 'string' }, - something: { - type: 'string', - value: '{"more":3,"complex":"nope"}', + }) + .start() + .completed(); + }); + }); + + createEsmTests(__dirname, 'scenario-track.mjs', 'instrument-auto-off.mjs', (createRunner, test) => { + test('captures logs when autoInstrument is false and logger is tracked', async () => { + await createRunner() + .withMockSentryServer() + .ignore('transaction') + .expect({ + log: { + items: [ + { + timestamp: expect.any(Number), + level: 'info', + body: 'hello world', + trace_id: expect.any(String), + severity_number: 9, + attributes: { + name: { value: 'myapp', type: 'string' }, + 'pino.logger.level': { value: 30, type: 'integer' }, + user: { value: 'user-id', type: 'string' }, + something: { + type: 'string', + value: '{"more":3,"complex":"nope"}', + }, + msg: { value: 'hello world', 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' }, }, - '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: 'error', - body: 'oh no', - trace_id: expect.any(String), - severity_number: 17, - attributes: { - name: { value: 'myapp', type: 'string' }, - msg: { value: 'oh no', type: 'string' }, - err: { value: expect.any(String), type: 'string' }, - 'pino.logger.level': { value: 50, 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' }, + { + timestamp: expect.any(Number), + level: 'error', + body: 'oh no', + trace_id: expect.any(String), + severity_number: 17, + attributes: { + name: { value: 'myapp', type: 'string' }, + module: { value: 'authentication', type: 'string' }, + msg: { value: 'oh no', type: 'string' }, + err: { value: expect.any(String), type: 'string' }, + 'pino.logger.level': { value: 50, 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(); + ], + }, + }) + .start() + .completed(); + }); }); - test('captures logs when autoInstrument is false and logger is tracked', async () => { - const instrumentPath = join(__dirname, 'instrument-auto-off.mjs'); - - await createRunner(__dirname, 'scenario-track.mjs') - .withMockSentryServer() - .withInstrument(instrumentPath) - .ignore('transaction') - .expect({ - log: { - items: [ - { - timestamp: expect.any(Number), - level: 'info', - body: 'hello world', - trace_id: expect.any(String), - severity_number: 9, - attributes: { - name: { value: 'myapp', type: 'string' }, - 'pino.logger.level': { value: 30, type: 'integer' }, - user: { value: 'user-id', type: 'string' }, - something: { - type: 'string', - value: '{"more":3,"complex":"nope"}', + createEsmTests(__dirname, 'scenario-structured-logging.mjs', 'instrument.mjs', (createRunner, test) => { + test('captures structured logs with msg field', async () => { + await createRunner() + .withMockSentryServer() + .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' }, }, - msg: { value: 'hello world', 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: 'error', - body: 'oh no', - trace_id: expect.any(String), - severity_number: 17, - attributes: { - name: { value: 'myapp', type: 'string' }, - module: { value: 'authentication', type: 'string' }, - msg: { value: 'oh no', type: 'string' }, - err: { value: expect.any(String), type: 'string' }, - 'pino.logger.level': { value: 50, 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' }, + { + 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' }, + }, }, - }, - ], - }, - }) - .start() - .completed(); + { + 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(); + }); }); - 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' }, - }, + createEsmTests(__dirname, 'scenario-error-context.mjs', 'instrument.mjs', (createRunner, test) => { + test('attaches log message and fields to captured error events', async () => { + await createRunner() + .withMockSentryServer() + .ignore('transaction') + .ignore('log') + .expect({ + event: { + exception: { + values: [ + { + type: 'Error', + value: 'failed to fetch user', + mechanism: { + type: 'auto.log.pino', + handled: true, + }, + }, + ], }, - { - 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' }, + contexts: { + pino: { + name: 'myapp', + requestId: 'abc-123', + message: 'upstream said Not Found', + msg: 'Failed to do X', }, }, - { - 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' }, + }, + }) + .expect({ + event: { + message: 'Something went wrong', + level: 'error', + contexts: { + pino: { + name: 'myapp', + requestId: 'def-456', + msg: 'Something went wrong', }, }, - ], - }, - }) - .start() - .completed(); + }, + }) + .start() + .completed(); + }); }); - test('attaches log message and fields to captured error events', async () => { - const instrumentPath = join(__dirname, 'instrument.mjs'); - - await createRunner(__dirname, 'scenario-error-context.mjs') - .withMockSentryServer() - .withInstrument(instrumentPath) - .ignore('transaction') - .ignore('log') - .expect({ - event: { - exception: { - values: [ - { - type: 'Error', - value: 'failed to fetch user', - mechanism: { - type: 'auto.log.pino', - handled: true, + createEsmTests(__dirname, 'scenario-custom-keys.mjs', 'instrument.mjs', (createRunner, test) => { + test('captures logs with custom messageKey and errorKey', async () => { + await createRunner() + .withMockSentryServer() + .ignore('transaction') + .expect({ + event: { + exception: { + values: [ + { + type: 'Error', + value: 'Custom error key', + mechanism: { + type: 'auto.log.pino', + handled: true, + }, + stacktrace: { + frames: expect.arrayContaining([ + expect.objectContaining({ + function: '?', + in_app: true, + module: 'scenario-custom-keys', + }), + ]), + }, }, - }, - ], - }, - contexts: { - pino: { - name: 'myapp', - requestId: 'abc-123', - message: 'upstream said Not Found', - msg: 'Failed to do X', + ], }, - }, - }, - }) - .expect({ - event: { - message: 'Something went wrong', - level: 'error', - contexts: { - pino: { - name: 'myapp', - requestId: 'def-456', - msg: 'Something went wrong', + contexts: { + pino: { + name: 'myapp', + message: 'Custom error key', + }, }, }, - }, - }) - .start() - .completed(); - }); - - test('captures logs with custom messageKey and errorKey', async () => { - const instrumentPath = join(__dirname, 'instrument.mjs'); - - await createRunner(__dirname, 'scenario-custom-keys.mjs') - .withMockSentryServer() - .withInstrument(instrumentPath) - .ignore('transaction') - .expect({ - event: { - exception: { - values: [ + }) + .expect({ + log: { + items: [ { - type: 'Error', - value: 'Custom error key', - mechanism: { - type: 'auto.log.pino', - handled: true, + timestamp: expect.any(Number), + level: 'info', + body: 'Custom message key', + trace_id: expect.any(String), + severity_number: 9, + attributes: { + name: { value: 'myapp', type: 'string' }, + 'pino.logger.level': { value: 30, type: 'integer' }, + user: { value: 'user-123', type: 'string' }, + action: { value: 'custom-key-test', type: 'string' }, + message: { value: 'Custom message key', 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' }, }, - stacktrace: { - frames: expect.arrayContaining([ - expect.objectContaining({ - function: '?', - in_app: true, - module: 'scenario-custom-keys', - }), - ]), + }, + { + timestamp: expect.any(Number), + level: 'error', + body: 'Custom error key', + trace_id: expect.any(String), + severity_number: 17, + attributes: { + name: { value: 'myapp', type: 'string' }, + 'pino.logger.level': { value: 50, type: 'integer' }, + message: { value: 'Custom error key', type: 'string' }, + error: { value: expect.any(String), 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' }, }, }, ], }, - contexts: { - pino: { - name: 'myapp', - message: 'Custom error key', - }, - }, - }, - }) - .expect({ - log: { - items: [ - { - timestamp: expect.any(Number), - level: 'info', - body: 'Custom message key', - trace_id: expect.any(String), - severity_number: 9, - attributes: { - name: { value: 'myapp', type: 'string' }, - 'pino.logger.level': { value: 30, type: 'integer' }, - user: { value: 'user-123', type: 'string' }, - action: { value: 'custom-key-test', type: 'string' }, - message: { value: 'Custom message key', 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: 'error', - body: 'Custom error key', - trace_id: expect.any(String), - severity_number: 17, - attributes: { - name: { value: 'myapp', type: 'string' }, - 'pino.logger.level': { value: 50, type: 'integer' }, - message: { value: 'Custom error key', type: 'string' }, - error: { value: expect.any(String), 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' }, - }, - }, - ], - }, - }) - .start() - .completed(); + }) + .start() + .completed(); + }); }); }); diff --git a/dev-packages/node-integration-tests/suites/winston/instrument.mjs b/dev-packages/node-integration-tests/suites/winston/instrument.mjs new file mode 100644 index 000000000000..4906aea85032 --- /dev/null +++ b/dev-packages/node-integration-tests/suites/winston/instrument.mjs @@ -0,0 +1,11 @@ +import * as Sentry from '@sentry/node'; +import { loggingTransport } from '@sentry-internal/node-integration-tests'; + +Sentry.init({ + dsn: 'https://public@dsn.ingest.sentry.io/1337', + release: '1.0.0', + environment: 'test', + enableLogs: true, + transport: loggingTransport, + debug: true, +}); diff --git a/dev-packages/node-integration-tests/suites/winston/subject.ts b/dev-packages/node-integration-tests/suites/winston/scenario.mjs similarity index 86% rename from dev-packages/node-integration-tests/suites/winston/subject.ts rename to dev-packages/node-integration-tests/suites/winston/scenario.mjs index 2c9d88456cce..5d1fa71a362a 100644 --- a/dev-packages/node-integration-tests/suites/winston/subject.ts +++ b/dev-packages/node-integration-tests/suites/winston/scenario.mjs @@ -1,18 +1,8 @@ import * as Sentry from '@sentry/node'; -import { loggingTransport } from '@sentry-internal/node-integration-tests'; import winston from 'winston'; import Transport from 'winston-transport'; -Sentry.init({ - dsn: 'https://public@dsn.ingest.sentry.io/1337', - release: '1.0.0', - environment: 'test', - enableLogs: true, - transport: loggingTransport, - debug: true, -}); - -async function run(): Promise { +async function run() { // Create a custom transport that extends winston-transport const SentryWinstonTransport = Sentry.createSentryWinstonTransport(Transport); @@ -99,7 +89,6 @@ async function run(): Promise { }); // This should NOT be captured (unknown level defaults to 'info', which is not in levels) - // @ts-ignore - custom levels are not part of the winston logger unmappedLogger.myUnknownLevel('This unknown level message should be skipped'); // This SHOULD be captured unmappedLogger.error('This error message should be captured'); @@ -132,11 +121,8 @@ async function run(): Promise { transports: [new SentryWinstonTransport()], }); - // @ts-ignore - custom levels are not part of the winston logger mappedLogger.customCritical('This is a critical message'); - // @ts-ignore - custom levels are not part of the winston logger mappedLogger.customWarning('This is a warning message'); - // @ts-ignore - custom levels are not part of the winston logger mappedLogger.customNotice('This is a notice message'); } diff --git a/dev-packages/node-integration-tests/suites/winston/test.ts b/dev-packages/node-integration-tests/suites/winston/test.ts index 1b359cc20f80..2555a4eddb03 100644 --- a/dev-packages/node-integration-tests/suites/winston/test.ts +++ b/dev-packages/node-integration-tests/suites/winston/test.ts @@ -1,409 +1,411 @@ -import { afterAll, describe, expect, test } from 'vitest'; -import { cleanupChildProcesses, createRunner } from '../../utils/runner'; +import { afterAll, describe, expect } from 'vitest'; +import { cleanupChildProcesses, createCjsTests } from '../../utils/runner'; describe('winston integration', () => { afterAll(() => { cleanupChildProcesses(); }); - test('should capture winston logs with default levels', async () => { - const runner = createRunner(__dirname, 'subject.ts') - .expect({ - log: { - items: [ - { - timestamp: expect.any(Number), - level: 'info', - body: 'Test info message', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.winston', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, + createCjsTests(__dirname, 'scenario.mjs', 'instrument.mjs', (createRunner, test) => { + test('should capture winston logs with default levels', async () => { + const runner = createRunner() + .expect({ + log: { + items: [ + { + timestamp: expect.any(Number), + level: 'info', + body: 'Test info message', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.winston', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + }, }, - }, - { - timestamp: expect.any(Number), - level: 'error', - body: 'Test error message', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.winston', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, + { + timestamp: expect.any(Number), + level: 'error', + body: 'Test error message', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.winston', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + }, }, - }, - ], - }, - }) - .start(); + ], + }, + }) + .start(); - await runner.completed(); - }); + await runner.completed(); + }); - test('should capture winston logs with custom levels', async () => { - const runner = createRunner(__dirname, 'subject.ts') - .withEnv({ CUSTOM_LEVELS: 'true' }) - .expect({ - log: { - items: [ - { - timestamp: expect.any(Number), - level: 'info', - body: 'Test info message', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.winston', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, + test('should capture winston logs with custom levels', async () => { + const runner = createRunner() + .withEnv({ CUSTOM_LEVELS: 'true' }) + .expect({ + log: { + items: [ + { + timestamp: expect.any(Number), + level: 'info', + body: 'Test info message', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.winston', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + }, }, - }, - { - timestamp: expect.any(Number), - level: 'error', - body: 'Test error message', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.winston', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, + { + timestamp: expect.any(Number), + level: 'error', + body: 'Test error message', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.winston', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + }, }, - }, - { - timestamp: expect.any(Number), - level: 'info', - body: 'Test info message', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.winston', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, + { + timestamp: expect.any(Number), + level: 'info', + body: 'Test info message', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.winston', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + }, }, - }, - { - timestamp: expect.any(Number), - level: 'error', - body: 'Test error message', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.winston', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, + { + timestamp: expect.any(Number), + level: 'error', + body: 'Test error message', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.winston', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + }, }, - }, - ], - }, - }) - .start(); + ], + }, + }) + .start(); - await runner.completed(); - }); + await runner.completed(); + }); - test("should capture winston logs with filter but don't show custom level warnings", async () => { - const runner = createRunner(__dirname, 'subject.ts') - .withEnv({ WITH_FILTER: 'true' }) - .expect({ - log: { - items: [ - { - timestamp: expect.any(Number), - level: 'info', - body: 'Test info message', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.winston', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, + test("should capture winston logs with filter but don't show custom level warnings", async () => { + const runner = createRunner() + .withEnv({ WITH_FILTER: 'true' }) + .expect({ + log: { + items: [ + { + timestamp: expect.any(Number), + level: 'info', + body: 'Test info message', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.winston', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + }, }, - }, - { - timestamp: expect.any(Number), - level: 'error', - body: 'Test error message', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.winston', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, + { + timestamp: expect.any(Number), + level: 'error', + body: 'Test error message', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.winston', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + }, }, - }, - { - timestamp: expect.any(Number), - level: 'error', - body: 'Test error message', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.winston', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, + { + timestamp: expect.any(Number), + level: 'error', + body: 'Test error message', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.winston', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + }, }, - }, - ], - }, - }) - .start(); + ], + }, + }) + .start(); - await runner.completed(); + await runner.completed(); - const logs = runner.getLogs(); + const logs = runner.getLogs(); - const warning = logs.find(log => log.includes('Winston log level info is not captured by Sentry.')); + const warning = logs.find(log => log.includes('Winston log level info is not captured by Sentry.')); - expect(warning).not.toBeDefined(); - }); + expect(warning).not.toBeDefined(); + }); - test('should capture winston logs with metadata', async () => { - const runner = createRunner(__dirname, 'subject.ts') - .withEnv({ WITH_METADATA: 'true' }) - .expect({ - log: { - items: [ - { - timestamp: expect.any(Number), - level: 'info', - body: 'Test info message', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.winston', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, + test('should capture winston logs with metadata', async () => { + const runner = createRunner() + .withEnv({ WITH_METADATA: 'true' }) + .expect({ + log: { + items: [ + { + timestamp: expect.any(Number), + level: 'info', + body: 'Test info message', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.winston', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + }, }, - }, - { - timestamp: expect.any(Number), - level: 'error', - body: 'Test error message', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.winston', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, + { + timestamp: expect.any(Number), + level: 'error', + body: 'Test error message', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.winston', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + }, }, - }, - { - timestamp: expect.any(Number), - level: 'info', - body: 'Test message with metadata', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.winston', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, - foo: { value: 'bar', type: 'string' }, - number: { value: 42, type: 'integer' }, + { + timestamp: expect.any(Number), + level: 'info', + body: 'Test message with metadata', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.winston', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + foo: { value: 'bar', type: 'string' }, + number: { value: 42, type: 'integer' }, + }, }, - }, - ], - }, - }) - .start(); + ], + }, + }) + .start(); - await runner.completed(); - }); + await runner.completed(); + }); - test('should skip unmapped custom levels when not in the levels option', async () => { - const runner = createRunner(__dirname, 'subject.ts') - .withEnv({ UNMAPPED_CUSTOM_LEVEL: 'true' }) - .expect({ - log: { - items: [ - // First, the default logger captures info and error - { - timestamp: expect.any(Number), - level: 'info', - body: 'Test info message', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.winston', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, + test('should skip unmapped custom levels when not in the levels option', async () => { + const runner = createRunner() + .withEnv({ UNMAPPED_CUSTOM_LEVEL: 'true' }) + .expect({ + log: { + items: [ + // First, the default logger captures info and error + { + timestamp: expect.any(Number), + level: 'info', + body: 'Test info message', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.winston', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + }, }, - }, - { - timestamp: expect.any(Number), - level: 'error', - body: 'Test error message', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.winston', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, + { + timestamp: expect.any(Number), + level: 'error', + body: 'Test error message', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.winston', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + }, }, - }, - // Then the unmapped logger only captures error (myUnknownLevel defaults to info, which is skipped) - { - timestamp: expect.any(Number), - level: 'error', - body: 'This error message should be captured', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.winston', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, + // Then the unmapped logger only captures error (myUnknownLevel defaults to info, which is skipped) + { + timestamp: expect.any(Number), + level: 'error', + body: 'This error message should be captured', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.winston', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + }, }, - }, - ], - }, - }) - .start(); + ], + }, + }) + .start(); - await runner.completed(); + await runner.completed(); - const logs = runner.getLogs(); + const logs = runner.getLogs(); - const warning = logs.find(log => log.includes('Winston log level myUnknownLevel is not captured by Sentry.')); + const warning = logs.find(log => log.includes('Winston log level myUnknownLevel is not captured by Sentry.')); - expect(warning).toBeDefined(); - }); + expect(warning).toBeDefined(); + }); - test('should map custom winston levels to Sentry severity levels', async () => { - const runner = createRunner(__dirname, 'subject.ts') - .withEnv({ CUSTOM_LEVEL_MAPPING: 'true' }) - .expect({ - log: { - items: [ - // First, the default logger captures info and error - { - timestamp: expect.any(Number), - level: 'info', - body: 'Test info message', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.winston', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, + test('should map custom winston levels to Sentry severity levels', async () => { + const runner = createRunner() + .withEnv({ CUSTOM_LEVEL_MAPPING: 'true' }) + .expect({ + log: { + items: [ + // First, the default logger captures info and error + { + timestamp: expect.any(Number), + level: 'info', + body: 'Test info message', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.winston', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + }, }, - }, - { - timestamp: expect.any(Number), - level: 'error', - body: 'Test error message', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.winston', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, + { + timestamp: expect.any(Number), + level: 'error', + body: 'Test error message', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.winston', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + }, }, - }, - // Then the mapped logger uses custom level mappings - { - timestamp: expect.any(Number), - level: 'fatal', // 'critical' maps to 'fatal' - body: 'This is a critical message', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.winston', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, + // Then the mapped logger uses custom level mappings + { + timestamp: expect.any(Number), + level: 'fatal', // 'critical' maps to 'fatal' + body: 'This is a critical message', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.winston', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + }, }, - }, - { - timestamp: expect.any(Number), - level: 'warn', // 'warning' maps to 'warn' - body: 'This is a warning message', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.winston', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, + { + timestamp: expect.any(Number), + level: 'warn', // 'warning' maps to 'warn' + body: 'This is a warning message', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.winston', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + }, }, - }, - { - timestamp: expect.any(Number), - level: 'info', // 'notice' maps to 'info' - body: 'This is a notice message', - severity_number: expect.any(Number), - trace_id: expect.any(String), - attributes: { - 'sentry.origin': { value: 'auto.log.winston', type: 'string' }, - 'sentry.release': { value: '1.0.0', type: 'string' }, - 'sentry.environment': { value: 'test', type: 'string' }, - 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, - 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, - 'server.address': { value: expect.any(String), type: 'string' }, + { + timestamp: expect.any(Number), + level: 'info', // 'notice' maps to 'info' + body: 'This is a notice message', + severity_number: expect.any(Number), + trace_id: expect.any(String), + attributes: { + 'sentry.origin': { value: 'auto.log.winston', type: 'string' }, + 'sentry.release': { value: '1.0.0', type: 'string' }, + 'sentry.environment': { value: 'test', type: 'string' }, + 'sentry.sdk.name': { value: 'sentry.javascript.node', type: 'string' }, + 'sentry.sdk.version': { value: expect.any(String), type: 'string' }, + 'server.address': { value: expect.any(String), type: 'string' }, + }, }, - }, - ], - }, - }) - .start(); + ], + }, + }) + .start(); - await runner.completed(); + await runner.completed(); + }); }); });