[−][src]Module opentelemetry::api::context
OpenTelemetry Context API
A Context
is a propagation mechanism which carries execution-scoped
values across API boundaries and between logically associated execution
units. Cross-cutting concerns access their data in-process using the same
shared context object.
Context
s are immutable, and their write operations result in the creation
of a new context containing the original values and the new specified values.
Context state
Concerns can create and retrieve their local state in the current execution
state represented by a context through the get
and with_value
methods. It is recommended to use application-specific types when storing new
context values to avoid unintentionally overwriting existing state.
Managing the current context
Contexts can be associated with the caller's current execution unit on a
given thread via the attach
method, and previous contexts can be restored
by dropping the returned ContextGuard
. Context can be nested, and will
restore their parent outer context when detached on drop. To access the
values of the context, a snapshot can be created via the Context::current
method.
Examples
use opentelemetry::api::Context; // Application-specific `a` and `b` values #[derive(Debug, PartialEq)] struct ValueA(&'static str); #[derive(Debug, PartialEq)] struct ValueB(u64); let _outer_guard = Context::new().with_value(ValueA("a")).attach(); // Only value a has been set let current = Context::current(); assert_eq!(current.get::<ValueA>(), Some(&ValueA("a"))); assert_eq!(current.get::<ValueB>(), None); { let _inner_guard = Context::current_with_value(ValueB(42)).attach(); // Both values are set in inner context let current = Context::current(); assert_eq!(current.get::<ValueA>(), Some(&ValueA("a"))); assert_eq!(current.get::<ValueB>(), Some(&ValueB(42))); } // Resets to only the `a` value when inner guard is dropped let current = Context::current(); assert_eq!(current.get::<ValueA>(), Some(&ValueA("a"))); assert_eq!(current.get::<ValueB>(), None);
Modules
propagation | OpenTelemetry Propagator interface |
Structs
Context | An execution-scoped collection of values. |
ContextGuard | A guard that resets the current context to the prior context when dropped. |