diff --git a/.changeset/@graphql-mesh_plugin-opentelemetry-962-dependencies.md b/.changeset/@graphql-mesh_plugin-opentelemetry-962-dependencies.md new file mode 100644 index 0000000000..7551ce134e --- /dev/null +++ b/.changeset/@graphql-mesh_plugin-opentelemetry-962-dependencies.md @@ -0,0 +1,7 @@ +--- +'@graphql-mesh/plugin-opentelemetry': patch +--- + +dependencies updates: + +- Added dependency [`@opentelemetry/core@^1.30.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/core/v/1.30.0) (to `dependencies`) diff --git a/.changeset/pretty-ducks-raise.md b/.changeset/pretty-ducks-raise.md new file mode 100644 index 0000000000..84905940e1 --- /dev/null +++ b/.changeset/pretty-ducks-raise.md @@ -0,0 +1,5 @@ +--- +'@graphql-mesh/plugin-opentelemetry': patch +--- + +OpenTelemetry uncaught internal errors are no longer logged as stringified JSON. diff --git a/packages/plugins/opentelemetry/package.json b/packages/plugins/opentelemetry/package.json index d14ce83f38..45a2311ea5 100644 --- a/packages/plugins/opentelemetry/package.json +++ b/packages/plugins/opentelemetry/package.json @@ -50,6 +50,7 @@ "@graphql-mesh/utils": "^0.104.1", "@graphql-tools/utils": "^10.8.1", "@opentelemetry/api": "^1.9.0", + "@opentelemetry/core": "^1.30.0", "@opentelemetry/exporter-trace-otlp-grpc": "^0.57.0", "@opentelemetry/exporter-trace-otlp-http": "^0.57.0", "@opentelemetry/exporter-zipkin": "^1.29.0", diff --git a/packages/plugins/opentelemetry/src/plugin.ts b/packages/plugins/opentelemetry/src/plugin.ts index f5d4eff918..1149ad7ca3 100644 --- a/packages/plugins/opentelemetry/src/plugin.ts +++ b/packages/plugins/opentelemetry/src/plugin.ts @@ -22,6 +22,7 @@ import { type TextMapGetter, type Tracer, } from '@opentelemetry/api'; +import { setGlobalErrorHandler } from '@opentelemetry/core'; import { Resource } from '@opentelemetry/resources'; import { type SpanProcessor } from '@opentelemetry/sdk-trace-base'; import { WebTracerProvider } from '@opentelemetry/sdk-trace-web'; @@ -212,16 +213,20 @@ export function useOpenTelemetry( provider = webProvider; } const pluginLogger = options.logger.child({ plugin: 'OpenTelemetry' }); + const diagLogger = pluginLogger.child('OtelDiag'); diag.setLogger( { - error: (message, ...args) => pluginLogger.error(message, ...args), - warn: (message, ...args) => pluginLogger.warn(message, ...args), - info: (message, ...args) => pluginLogger.info(message, ...args), - debug: (message, ...args) => pluginLogger.debug(message, ...args), - verbose: (message, ...args) => pluginLogger.debug(message, ...args), + error: (message, ...args) => diagLogger.error(message, ...args), + warn: (message, ...args) => diagLogger.warn(message, ...args), + info: (message, ...args) => diagLogger.info(message, ...args), + debug: (message, ...args) => diagLogger.debug(message, ...args), + verbose: (message, ...args) => diagLogger.debug(message, ...args), }, DiagLogLevel.VERBOSE, ); + setGlobalErrorHandler((err) => + diagLogger.error('Uncaught OTEL internal error', err), + ); tracer = options.tracer || trace.getTracer('gateway'); preparation$ = undefined; }); diff --git a/yarn.lock b/yarn.lock index 9f21fb066e..5fae920382 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4501,6 +4501,7 @@ __metadata: "@graphql-mesh/utils": "npm:^0.104.1" "@graphql-tools/utils": "npm:^10.8.1" "@opentelemetry/api": "npm:^1.9.0" + "@opentelemetry/core": "npm:^1.30.0" "@opentelemetry/exporter-trace-otlp-grpc": "npm:^0.57.0" "@opentelemetry/exporter-trace-otlp-http": "npm:^0.57.0" "@opentelemetry/exporter-zipkin": "npm:^1.29.0" @@ -6523,7 +6524,7 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/core@npm:1.30.1, @opentelemetry/core@npm:^1.30.1": +"@opentelemetry/core@npm:1.30.1, @opentelemetry/core@npm:^1.30.0, @opentelemetry/core@npm:^1.30.1": version: 1.30.1 resolution: "@opentelemetry/core@npm:1.30.1" dependencies: