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}