Skip to content

Commit 5de2caf

Browse files
authored
Emit internal log for global meter provider (#2331)
1 parent 8c9babb commit 5de2caf

File tree

2 files changed

+11
-6
lines changed

2 files changed

+11
-6
lines changed

opentelemetry/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ tracing = {workspace = true, optional = true} # optional for opentelemetry inter
3131
js-sys = "0.3.63"
3232

3333
[features]
34-
default = ["trace", "metrics", "logs"]
34+
default = ["trace", "metrics", "logs", "internal-logs"]
3535
trace = ["pin-project-lite", "futures-sink", "futures-core", "thiserror"]
3636
metrics = []
3737
testing = ["trace", "metrics"]

opentelemetry/src/global/metrics.rs

+10-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::metrics::{self, Meter, MeterProvider};
2-
use crate::InstrumentationScope;
2+
use crate::{otel_error, otel_info, InstrumentationScope};
33
use std::sync::{Arc, OnceLock, RwLock};
44

55
type GlobalMeterProvider = Arc<dyn MeterProvider + Send + Sync>;
@@ -19,10 +19,15 @@ pub fn set_meter_provider<P>(new_provider: P)
1919
where
2020
P: metrics::MeterProvider + Send + Sync + 'static,
2121
{
22-
let mut global_provider = global_meter_provider()
23-
.write()
24-
.expect("GLOBAL_METER_PROVIDER RwLock poisoned");
25-
*global_provider = Arc::new(new_provider);
22+
// Try to set the global meter provider. If the RwLock is poisoned, we'll log an error.
23+
let mut global_provider = global_meter_provider().write();
24+
25+
if let Ok(ref mut provider) = global_provider {
26+
**provider = Arc::new(new_provider);
27+
otel_info!(name: "MeterProvider.GlobalSet", message = "Global meter provider is set. Meters can now be created using global::meter() or global::meter_with_scope().");
28+
} else {
29+
otel_error!(name: "MeterProvider.GlobalSetFailed", message = "Global meter provider is not set due to lock poison. Meters created using global::meter() or global::meter_with_scope() will not function.");
30+
}
2631
}
2732

2833
/// Returns an instance of the currently configured global [`MeterProvider`].

0 commit comments

Comments
 (0)