opentelemetry_spanprocessor_any/trace/tracer_provider.rs
1use crate::trace::{TraceResult, Tracer};
2use std::borrow::Cow;
3
4/// Types that can create instances of [`Tracer`].
5pub trait TracerProvider {
6 /// The [`Tracer`] type that this provider will return.
7 type Tracer: Tracer;
8
9 /// Returns a new tracer with the given name.
10 ///
11 /// The `name` should be the application name or the name of the library
12 /// providing instrumentation. If the name is empty, then an
13 /// implementation-defined default name may be used instead.
14 ///
15 /// # Examples
16 ///
17 /// ```
18 /// use opentelemetry::{global, trace::TracerProvider};
19 ///
20 /// let provider = global::tracer_provider();
21 ///
22 /// // tracer used in applications/binaries
23 /// let tracer = provider.tracer("my_app");
24 ///
25 /// // tracer used in libraries/crates that optionally includes version and schema url
26 /// let tracer = provider.versioned_tracer(
27 /// "my_library",
28 /// Some(env!("CARGO_PKG_VERSION")),
29 /// Some("https://opentelemetry.io/schema/1.0.0")
30 /// );
31 /// ```
32 fn tracer(&self, name: impl Into<Cow<'static, str>>) -> Self::Tracer {
33 self.versioned_tracer(name, None, None)
34 }
35
36 /// Returns a new versioned tracer with a given name.
37 ///
38 /// The `name` should be the application name or the name of the library
39 /// providing instrumentation. If the name is empty, then an
40 /// implementation-defined default name may be used instead.
41 ///
42 /// # Examples
43 ///
44 /// ```
45 /// use opentelemetry::{global, trace::TracerProvider};
46 ///
47 /// let provider = global::tracer_provider();
48 ///
49 /// // tracer used in applications/binaries
50 /// let tracer = provider.tracer("my_app");
51 ///
52 /// // tracer used in libraries/crates that optionally includes version and schema url
53 /// let tracer = provider.versioned_tracer(
54 /// "my_library",
55 /// Some(env!("CARGO_PKG_VERSION")),
56 /// Some("https://opentelemetry.io/schema/1.0.0")
57 /// );
58 /// ```
59 fn versioned_tracer(
60 &self,
61 name: impl Into<Cow<'static, str>>,
62 version: Option<&'static str>,
63 schema_url: Option<&'static str>,
64 ) -> Self::Tracer;
65
66 /// Force flush all remaining spans in span processors and return results.
67 fn force_flush(&self) -> Vec<TraceResult<()>>;
68}