opentelemetry/global/
internal_logging.rs

1#![allow(unused_macros)]
2///
3/// **Note**: These macros (`otel_info!`, `otel_warn!`, `otel_debug!`, and `otel_error!`) are intended to be used
4/// **internally within OpenTelemetry code** or for **custom exporters, processors and other plugins**. They are not designed
5/// for general application logging and should not be used for that purpose.
6///
7/// Macro for logging informational messages in OpenTelemetry.
8///
9/// # Fields:
10/// - `name`: The operation or action being logged.
11/// - Additional optional key-value pairs can be passed as attributes.
12///
13/// # Example:
14/// ```rust
15/// use opentelemetry::otel_info;
16/// otel_info!(name: "sdk_start", version = "1.0.0", schema_url = "http://example.com");
17/// ```
18///
19// TODO: Remove `name` attribute duplication in logging macros below once `tracing::Fmt` supports displaying `name`.
20// See issue: https://github.com/tokio-rs/tracing/issues/2774
21#[macro_export]
22macro_rules! otel_info {
23    (name: $name:expr $(,)?) => {
24        #[cfg(feature = "internal-logs")]
25        {
26            tracing::info!( name: $name, target: env!("CARGO_PKG_NAME"), name = $name, "");
27        }
28        #[cfg(not(feature = "internal-logs"))]
29        {
30            let _ = $name; // Compiler will optimize this out as it's unused.
31        }
32    };
33    (name: $name:expr, $($key:ident = $value:expr),+ $(,)?) => {
34        #[cfg(feature = "internal-logs")]
35        {
36            tracing::info!(name: $name, target: env!("CARGO_PKG_NAME"), name = $name, $($key = $value),+, "");
37        }
38        #[cfg(not(feature = "internal-logs"))]
39        {
40            let _ = ($name, $($value),+); // Compiler will optimize this out as it's unused.
41        }
42    };
43}
44
45/// Macro for logging warning messages in OpenTelemetry.
46///
47/// # Fields:
48/// - `name`: The operation or action being logged.
49/// - Additional optional key-value pairs can be passed as attributes.
50///
51/// # Example:
52/// ```rust
53/// use opentelemetry::otel_warn;
54/// otel_warn!(name: "export_warning", error_code = 404, version = "1.0.0");
55/// ```
56#[macro_export]
57macro_rules! otel_warn {
58    (name: $name:expr $(,)?) => {
59        #[cfg(feature = "internal-logs")]
60        {
61            tracing::warn!(name: $name, target: env!("CARGO_PKG_NAME"), name = $name, "");
62        }
63        #[cfg(not(feature = "internal-logs"))]
64        {
65            let _ = $name; // Compiler will optimize this out as it's unused.
66        }
67    };
68    (name: $name:expr, $($key:ident = $value:expr),+ $(,)?) => {
69        #[cfg(feature = "internal-logs")]
70        {
71            tracing::warn!(name: $name,
72                            target: env!("CARGO_PKG_NAME"),
73                            name = $name,
74                            $($key = {
75                                    $value
76                            }),+,
77                            ""
78                    )
79        }
80        #[cfg(not(feature = "internal-logs"))]
81        {
82            let _ = ($name, $($value),+); // Compiler will optimize this out as it's unused.
83        }
84    };
85}
86
87/// Macro for logging debug messages in OpenTelemetry.
88///
89/// # Fields:
90/// - `name`: The operation or action being logged.
91/// - Additional optional key-value pairs can be passed as attributes.
92///
93/// # Example:
94/// ```rust
95/// use opentelemetry::otel_debug;
96/// otel_debug!(name: "debug_operation", debug_level = "high", version = "1.0.0");
97/// ```
98#[macro_export]
99macro_rules! otel_debug {
100    (name: $name:expr $(,)?) => {
101        #[cfg(feature = "internal-logs")]
102        {
103            tracing::debug!(name: $name, target: env!("CARGO_PKG_NAME"), name = $name, "");
104        }
105        #[cfg(not(feature = "internal-logs"))]
106        {
107            let _ = $name; // Compiler will optimize this out as it's unused.
108        }
109    };
110    (name: $name:expr, $($key:ident = $value:expr),+ $(,)?) => {
111        #[cfg(feature = "internal-logs")]
112        {
113            tracing::debug!(name: $name, target: env!("CARGO_PKG_NAME"), name = $name, $($key = $value),+, "");
114        }
115        #[cfg(not(feature = "internal-logs"))]
116        {
117            let _ = ($name, $($value),+); // Compiler will optimize this out as it's unused.
118        }
119    };
120}
121
122/// Macro for logging error messages in OpenTelemetry.
123///
124/// # Fields:
125/// - `name`: The operation or action being logged.
126/// - Additional optional key-value pairs can be passed as attributes.
127///
128/// # Example:
129/// ```rust
130/// use opentelemetry::otel_error;
131/// otel_error!(name: "export_failure", error_code = 500, version = "1.0.0");
132/// ```
133#[macro_export]
134macro_rules! otel_error {
135    (name: $name:expr $(,)?) => {
136        #[cfg(feature = "internal-logs")]
137        {
138            tracing::error!(name: $name, target: env!("CARGO_PKG_NAME"), name = $name, "");
139        }
140        #[cfg(not(feature = "internal-logs"))]
141        {
142            let _ = $name; // Compiler will optimize this out as it's unused.
143        }
144    };
145    (name: $name:expr, $($key:ident = $value:expr),+ $(,)?) => {
146        #[cfg(feature = "internal-logs")]
147        {
148            tracing::error!(name: $name,
149                            target: env!("CARGO_PKG_NAME"),
150                            name = $name,
151                            $($key = {
152                                    $value
153                            }),+,
154                            ""
155                    )
156        }
157        #[cfg(not(feature = "internal-logs"))]
158        {
159            let _ = ($name, $($value),+); // Compiler will optimize this out as it's unused.
160        }
161    };
162}