{"record":{"id":"4b409369ea8a71d1","repo":"denoland/deno","slug":"tracerprovider-can-not-be-constructed","errorCode":null,"errorMessage":"TracerProvider can not be constructed","messagePattern":"TracerProvider can not be constructed","errorType":"exception","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"ext/telemetry/telemetry.ts","lineNumber":341,"sourceCode":"      op_otel_span_attribute1(\n        span,\n        attributesLocation,\n        attributesTarget,\n        attributeKvs[i][0],\n        attributeKvs[i][1],\n      );\n      i += 1;\n    }\n  }\n}\n\ninterface TracerOptions {\n  schemaUrl?: string;\n}\n\nclass TracerProvider {\n  constructor() {\n    throw new TypeError(\"TracerProvider can not be constructed\");\n  }\n\n  static getTracer(\n    name: string,\n    version?: string,\n    options?: TracerOptions,\n  ): Tracer {\n    const tracer = new OtelTracer(name, version, options?.schemaUrl);\n    return new Tracer(tracer);\n  }\n}\n\nclass Tracer {\n  #tracer: OtelTracer;\n\n  constructor(tracer: OtelTracer) {\n    this.#tracer = tracer;\n  }","sourceCodeStart":323,"sourceCodeEnd":359,"githubUrl":"https://github.com/denoland/deno/blob/a961cdec3b1948844414ebeecc697dcad76df2d1/ext/telemetry/telemetry.ts#L323-L359","documentation":"Deno's built-in OpenTelemetry implementation registers TracerProvider on the OpenTelemetry JS API global (globalThis[Symbol.for(\"opentelemetry.js.api.1\")].trace) when tracing is enabled. The class is a namespace of statics with a private-constructor guard: new TracerProvider() always throws. Tracers are obtained via the static factory TracerProvider.getTracer(name, version?, options?).","triggerScenarios":"Executing new TracerProvider() against the Deno-provided provider — e.g. new otel.trace() on the global symbol, or an @opentelemetry/api-compatible library that instantiates the provider class it found on the global instead of calling getTracer; most common when running with Deno's built-in OTel enabled (OTEL_DENO / OTEL_EXPORTER_OTLP_* configured).","commonSituations":"Swapping @opentelemetry/api's real TraceApi for Deno's shim and assuming it's instantiable; code written for the SDK's NodeTracerProvider being pointed at Deno's built-in provider; version drift between OTel API packages and Deno's compat shim.","solutions":["Use the static factory: TracerProvider.getTracer(name, version) (or trace.getTracer from @opentelemetry/api, which routes there)","If you need a custom/full SDK provider, register your own provider via the official @opentelemetry/api trace.setTracerProvider instead of instantiating Deno's","Check the API surface before use: typeof TracerProvider.getTracer === \"function\" to confirm you have Deno's built-in provider"],"exampleFix":"// before\nconst otel = globalThis[Symbol.for(\"opentelemetry.js.api.1\")];\nconst provider = new otel.trace(\"my-app\"); // TypeError: can not be constructed\n\n// after\nconst tracer = otel.trace.getTracer(\"my-app\", \"1.0.0\");","handlingStrategy":"validation","validationCode":"const otel = globalThis[Symbol.for(\"opentelemetry.js.api.1\")];\nif (otel?.trace && typeof otel.trace.getTracer === \"function\") {\n  const tracer = otel.trace.getTracer(\"app\", \"1.0.0\"); // never `new otel.trace`\n}","typeGuard":"const isDenoOtelProvider = (provider: unknown): provider is { getTracer(name: string, version?: string): unknown } =>\n  typeof (provider as { getTracer?: unknown })?.getTracer === \"function\";","tryCatchPattern":"try { provider = new ProviderClass(name); } catch (err) { if (err instanceof TypeError && err.message.includes(\"can not be constructed\")) { tracer = ProviderClass.getTracer(name); } else throw err; }","preventionTips":["Never instantiate provider classes from OTel API globals; always use getTracer/getMeter factories","Pin @opentelemetry/api versions compatible with Deno's built-in shim","For custom SDK providers, register them via trace.setTracerProvider instead of replacing Deno's global"],"tags":["deno","opentelemetry","telemetry","tracing","illegal-constructor","otel"],"backgroundTag":"illegal-constructor","analyzedSha":"a961cdec3b1948844414ebeecc697dcad76df2d1","analyzedAt":"2026-08-20T13:07:44.778Z","contentChangedAt":"2026-08-20T13:07:44.778Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}