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}