Skip to content

Commit fb029f9

Browse files
authored
Merge branch 'main' into logger-invalid-name
2 parents 6cee8e7 + 5de2caf commit fb029f9

File tree

14 files changed

+123
-57
lines changed

14 files changed

+123
-57
lines changed

examples/self-diagnostics/src/main.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
2626
// OpenTelemetry uses `tracing` crate for its internal logging. Unless a
2727
// tracing subscriber is set, the logs will be discarded. In this example,
2828
// we configure a `tracing` subscriber to:
29-
// 1. Print logs of level INFO or higher to stdout.
29+
// 1. Print logs of level INFO or higher to stdout using tracing's fmt layer.
3030
// 2. Filter logs from OpenTelemetry's dependencies (like tonic, hyper,
3131
// reqwest etc. which are commonly used by the OTLP exporter) to only print
3232
// ERROR-level logs. This filtering helps reduce repetitive log messages
@@ -35,7 +35,7 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
3535
// https://github.com/open-telemetry/opentelemetry-rust/issues/761 is
3636
// resolved.
3737

38-
// Target name used by OpenTelemetry always start with "opentelemetry".
38+
// Target names used by all OpenTelemetry official crates always start with "opentelemetry".
3939
// Hence, one may use "add_directive("opentelemetry=off".parse().unwrap())"
4040
// to turn off all logs from OpenTelemetry.
4141

opentelemetry-sdk/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
.with_resource(Resource::empty())
1818
.build();
1919
```
20+
- `logs::LogData` struct is deprecated, and scheduled to be removed from public API in `v0.28.0`.
2021

2122
## 0.27.0
2223

opentelemetry-sdk/src/logs/log_emitter.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,10 +151,15 @@ impl LoggerProviderInner {
151151
impl Drop for LoggerProviderInner {
152152
fn drop(&mut self) {
153153
if !self.is_shutdown.load(Ordering::Relaxed) {
154+
otel_info!(
155+
name: "LoggerProvider.Drop",
156+
message = "Last reference of LoggerProvider dropped, initiating shutdown."
157+
);
154158
let _ = self.shutdown(); // errors are handled within shutdown
155159
} else {
156160
otel_debug!(
157-
name: "LoggerProvider.Drop.AlreadyShutdown"
161+
name: "LoggerProvider.Drop.AlreadyShutdown",
162+
message = "LoggerProvider was already shut down; drop will not attempt shutdown again."
158163
);
159164
}
160165
}

opentelemetry-sdk/src/logs/log_processor.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,14 @@ const OTEL_BLRP_MAX_EXPORT_BATCH_SIZE_DEFAULT: usize = 512;
4545
pub trait LogProcessor: Send + Sync + Debug {
4646
/// Called when a log record is ready to processed and exported.
4747
///
48-
/// This method receives a mutable reference to `LogData`. If the processor
48+
/// This method receives a mutable reference to `LogRecord`. If the processor
4949
/// needs to handle the export asynchronously, it should clone the data to
5050
/// ensure it can be safely processed without lifetime issues. Any changes
5151
/// made to the log data in this method will be reflected in the next log
5252
/// processor in the chain.
5353
///
5454
/// # Parameters
55-
/// - `record`: A mutable reference to `LogData` representing the log record.
55+
/// - `record`: A mutable reference to `LogRecord` representing the log record.
5656
/// - `instrumentation`: The instrumentation scope associated with the log record.
5757
fn emit(&self, data: &mut LogRecord, instrumentation: &InstrumentationScope);
5858
/// Force the logs lying in the cache to be exported.

opentelemetry-sdk/src/logs/mod.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ pub use log_processor::{
1313
use opentelemetry::InstrumentationScope;
1414
pub use record::{LogRecord, TraceContext};
1515

16+
#[deprecated(
17+
since = "0.27.1",
18+
note = "The struct is not used anywhere in the SDK and will be removed in the next major release."
19+
)]
1620
/// `LogData` represents a single log event without resource context.
1721
#[derive(Clone, Debug)]
1822
pub struct LogData {

opentelemetry-sdk/src/metrics/meter_provider.rs

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use std::{
99

1010
use opentelemetry::{
1111
metrics::{Meter, MeterProvider},
12-
otel_debug, otel_error, InstrumentationScope,
12+
otel_debug, otel_error, otel_info, InstrumentationScope,
1313
};
1414

1515
use crate::metrics::{MetricError, MetricResult};
@@ -109,6 +109,10 @@ impl SdkMeterProvider {
109109
/// There is no guaranteed that all telemetry be flushed or all resources have
110110
/// been released on error.
111111
pub fn shutdown(&self) -> MetricResult<()> {
112+
otel_info!(
113+
name: "MeterProvider.Shutdown",
114+
message = "User initiated shutdown of MeterProvider."
115+
);
112116
self.inner.shutdown()
113117
}
114118
}
@@ -139,15 +143,25 @@ impl Drop for SdkMeterProviderInner {
139143
// shutdown(), then we don't need to call shutdown again.
140144
if self.is_shutdown.load(Ordering::Relaxed) {
141145
otel_debug!(
142-
name: "MeterProvider.AlreadyShutdown",
143-
message = "Meter provider was already shut down; drop will not attempt shutdown again."
146+
name: "MeterProvider.Drop.AlreadyShutdown",
147+
message = "MeterProvider was already shut down; drop will not attempt shutdown again."
144148
);
145-
} else if let Err(err) = self.shutdown() {
146-
otel_error!(
147-
name: "MeterProvider.ShutdownFailed",
148-
message = "Shutdown attempt failed during drop of MeterProvider.",
149-
reason = format!("{}", err)
149+
} else {
150+
otel_info!(
151+
name: "MeterProvider.Drop",
152+
message = "Last reference of MeterProvider dropped, initiating shutdown."
150153
);
154+
if let Err(err) = self.shutdown() {
155+
otel_error!(
156+
name: "MeterProvider.Drop.ShutdownFailed",
157+
message = "Shutdown attempt failed during drop of MeterProvider.",
158+
reason = format!("{}", err)
159+
);
160+
} else {
161+
otel_info!(
162+
name: "MeterProvider.Drop.ShutdownCompleted",
163+
);
164+
}
151165
}
152166
}
153167
}
@@ -231,7 +245,7 @@ impl MeterProviderBuilder {
231245
/// Construct a new [MeterProvider] with this configuration.
232246
233247
pub fn build(self) -> SdkMeterProvider {
234-
SdkMeterProvider {
248+
let meter_provider = SdkMeterProvider {
235249
inner: Arc::new(SdkMeterProviderInner {
236250
pipes: Arc::new(Pipelines::new(
237251
self.resource.unwrap_or_default(),
@@ -241,7 +255,12 @@ impl MeterProviderBuilder {
241255
meters: Default::default(),
242256
is_shutdown: AtomicBool::new(false),
243257
}),
244-
}
258+
};
259+
260+
otel_info!(
261+
name: "MeterProvider.Built",
262+
);
263+
meter_provider
245264
}
246265
}
247266

opentelemetry-sdk/src/metrics/periodic_reader.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,10 +234,18 @@ impl<RT: Runtime> PeriodicReaderWorker<RT> {
234234
async fn collect_and_export(&mut self) -> MetricResult<()> {
235235
self.reader.collect(&mut self.rm)?;
236236
if self.rm.scope_metrics.is_empty() {
237+
otel_debug!(
238+
name: "PeriodicReaderWorker.NoMetricsToExport",
239+
);
237240
// No metrics to export.
238241
return Ok(());
239242
}
240243

244+
otel_debug!(
245+
name: "PeriodicReaderWorker.InvokeExporter",
246+
message = "Calling exporter's export method with collected metrics.",
247+
count = self.rm.scope_metrics.len(),
248+
);
241249
let export = self.reader.exporter.export(&mut self.rm);
242250
let timeout = self.runtime.delay(self.timeout);
243251
pin_mut!(export);

opentelemetry-sdk/src/testing/logs/in_memory_exporter.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use std::sync::{Arc, Mutex};
1010
/// An in-memory logs exporter that stores logs data in memory..
1111
///
1212
/// This exporter is useful for testing and debugging purposes.
13-
/// It stores logs in a `Vec<LogData>`. Logs can be retrieved using
13+
/// It stores logs in a `Vec<OwnedLogData>`. Logs can be retrieved using
1414
/// `get_emitted_logs` method.
1515
///
1616
/// # Example
@@ -65,9 +65,9 @@ pub struct OwnedLogData {
6565
pub struct LogDataWithResource {
6666
/// Log record
6767
pub record: LogRecord,
68-
/// Instrumentation details for the emitter who produced this `LogData`.
68+
/// Instrumentation details for the emitter who produced this `LogRecord`.
6969
pub instrumentation: InstrumentationScope,
70-
/// Resource for the emitter who produced this `LogData`.
70+
/// Resource for the emitter who produced this `LogRecord`.
7171
pub resource: Cow<'static, Resource>,
7272
}
7373

@@ -137,7 +137,7 @@ impl InMemoryLogExporterBuilder {
137137
}
138138

139139
impl InMemoryLogExporter {
140-
/// Returns the logs emitted via Logger as a vector of `LogData`.
140+
/// Returns the logs emitted via Logger as a vector of `LogDataWithResource`.
141141
///
142142
/// # Example
143143
///

opentelemetry/Cargo.toml

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,19 +21,18 @@ all-features = true
2121
rustdoc-args = ["--cfg", "docsrs"]
2222

2323
[dependencies]
24-
futures-core = { workspace = true }
25-
futures-sink = "0.3"
26-
once_cell = { workspace = true }
24+
futures-core = { workspace = true, optional = true }
25+
futures-sink = { version = "0.3", optional = true }
2726
pin-project-lite = { workspace = true, optional = true }
28-
thiserror = { workspace = true }
27+
thiserror = { workspace = true, optional = true}
2928
tracing = {workspace = true, optional = true} # optional for opentelemetry internal logging
3029

3130
[target.'cfg(all(target_arch = "wasm32", not(target_os = "wasi")))'.dependencies]
3231
js-sys = "0.3.63"
3332

3433
[features]
35-
default = ["trace", "metrics", "logs"]
36-
trace = ["pin-project-lite"]
34+
default = ["trace", "metrics", "logs", "internal-logs"]
35+
trace = ["pin-project-lite", "futures-sink", "futures-core", "thiserror"]
3736
metrics = []
3837
testing = ["trace", "metrics"]
3938
logs = []

opentelemetry/src/baggage.rs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,22 @@
1515
//!
1616
//! [W3C Baggage]: https://w3c.github.io/baggage
1717
use crate::{Context, Key, KeyValue, Value};
18-
use once_cell::sync::Lazy;
1918
use std::collections::{hash_map, HashMap};
2019
use std::fmt;
20+
use std::sync::OnceLock;
2121

22-
static DEFAULT_BAGGAGE: Lazy<Baggage> = Lazy::new(Baggage::default);
22+
static DEFAULT_BAGGAGE: OnceLock<Baggage> = OnceLock::new();
2323

2424
const MAX_KEY_VALUE_PAIRS: usize = 180;
2525
const MAX_BYTES_FOR_ONE_PAIR: usize = 4096;
2626
const MAX_LEN_OF_ALL_PAIRS: usize = 8192;
2727

28+
/// Returns the default baggage, ensuring it is initialized only once.
29+
#[inline]
30+
fn get_default_baggage() -> &'static Baggage {
31+
DEFAULT_BAGGAGE.get_or_init(Baggage::default)
32+
}
33+
2834
/// A set of name/value pairs describing user-defined properties.
2935
///
3036
/// ### Baggage Names
@@ -399,7 +405,7 @@ impl BaggageExt for Context {
399405
}
400406

401407
fn baggage(&self) -> &Baggage {
402-
self.get::<Baggage>().unwrap_or(&DEFAULT_BAGGAGE)
408+
self.get::<Baggage>().unwrap_or(get_default_baggage())
403409
}
404410
}
405411

0 commit comments

Comments
 (0)