opentelemetry-js/packages/opentelemetry-context-zone
OpenTelemetry Bot 98f9d720af
chore: prepare next release (#5903)
Co-authored-by: Marc Pichler <marc.pichler@dynatrace.com>
2025-09-04 08:35:42 +00:00
..
src chore: enable tsconfig isolatedModules (#5697) 2025-05-21 08:10:51 +00:00
.eslintignore
.eslintrc.js chore(deps): update dependency eslint to v8.43.0 (#3929) 2023-07-06 15:14:56 +02:00
LICENSE
README.md feat(sdk-trace-base): add `spanProcessors` property in `TracerConfig` interface (#5138) 2024-11-12 15:48:00 +00:00
package.json chore: prepare next release (#5903) 2025-09-04 08:35:42 +00:00
tsconfig.esm.json Update `next` branch (#4294) 2023-11-15 11:15:51 -05:00
tsconfig.esnext.json Update `next` branch (#4294) 2023-11-15 11:15:51 -05:00
tsconfig.json Update `next` branch (#4294) 2023-11-15 11:15:51 -05:00

README.md

OpenTelemetry Context Zone

NPM Published Version Apache License

This module provides Zone Context Manager with bundled zone-js for Web applications. If you have your own zone-js please use @opentelemetry/context-zone-peer-dep If you use Angular it means you already have the zone-js and you should use @opentelemetry/context-zone-peer-dep

Installation

npm install --save @opentelemetry/context-zone

Usage

import { context, trace } from '@opentelemetry/api';
import {
  ConsoleSpanExporter,
  SimpleSpanProcessor,
  WebTracerProvider,
} from '@opentelemetry/sdk-trace-web';
import { ZoneContextManager } from '@opentelemetry/context-zone';

const providerWithZone = new WebTracerProvider({
  spanProcessors: [new SimpleSpanProcessor(new ConsoleSpanExporter())]
});
providerWithZone.register({
  contextManager: new ZoneContextManager()
});

// Example how the ZoneContextManager keeps the reference to the correct context during async operations
const webTracerWithZone = providerWithZone.getTracer('default');
const span1 = webTracerWithZone.startSpan('foo1');

context.with(trace.setSpan(context.active(), span1), () => {
  console.log('Current span is span1', trace.getSpan(context.active()) === span1);
  setTimeout(() => {
    const span2 = webTracerWithZone.startSpan('foo2');
    console.log('Current span is span1', trace.getSpan(context.active()) === span1);
    context.with(trace.setSpan(context.active(), span2), () => {
      console.log('Current span is span2', trace.getSpan(context.active()) === span2);
      setTimeout(() => {
        console.log('Current span is span2', trace.getSpan(context.active()) === span2);
      }, 500);
    });
    // there is a timeout which still keeps span2 active
    console.log('Current span is span2', trace.getSpan(context.active()) === span2);
  }, 500);
  console.log('Current span is span1', trace.getSpan(context.active()) === span1);
});

License

Apache 2.0 - See LICENSE for more information.