Skip to content

Commit 30e8b29

Browse files
fix: exclude otel errors (#407)
1 parent 6ac0b3f commit 30e8b29

File tree

1 file changed

+19
-12
lines changed

1 file changed

+19
-12
lines changed

bins/nittei/src/telemetry.rs

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,26 +8,31 @@ use opentelemetry_sdk::{
88
propagation::TraceContextPropagator,
99
trace::{self, RandomIdGenerator, Sampler, SdkTracerProvider},
1010
};
11-
use tracing::warn;
12-
use tracing_subscriber::{EnvFilter, Registry, layer::SubscriberExt};
11+
use tracing::{Level, warn};
12+
use tracing_subscriber::{EnvFilter, Layer, Registry, filter, layer::SubscriberExt};
1313

1414
/// Register a subscriber as global default to process span data.
1515
///
1616
/// It should only be called once!
1717
pub fn init_subscriber() -> anyhow::Result<()> {
1818
// Filter the spans that are shown based on the RUST_LOG env var or the default value ("info")
19-
let env_filter = EnvFilter::try_from_default_env()
20-
.unwrap_or_else(|_| EnvFilter::new("info"))
21-
// Downgrade opentelemetry_sdk errors to warnings
22-
.add_directive("opentelemetry_sdk=warn".parse()?);
19+
let env_filter = EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("info"));
20+
21+
// Create a filter that excludes error-level events from opentelemetry_sdk
22+
let fmt_filter = filter::filter_fn(|metadata| {
23+
!(metadata.level() == &Level::ERROR && metadata.target().starts_with("opentelemetry_sdk"))
24+
});
2325

2426
// If the binary is compiled in debug mode (aka for development)
2527
// use the compact format for logs
2628
if cfg!(debug_assertions) {
27-
tracing_subscriber::fmt()
28-
.compact()
29-
.with_env_filter(env_filter)
30-
.init();
29+
let subscriber = Registry::default().with(env_filter).with(
30+
tracing_subscriber::fmt::layer()
31+
.compact()
32+
.with_filter(fmt_filter),
33+
);
34+
35+
tracing::subscriber::set_global_default(subscriber)?;
3136
} else {
3237
let observability_config = &nittei_utils::config::APP_CONFIG.observability;
3338
// In production, use the JSON format for logs
@@ -62,7 +67,8 @@ pub fn init_subscriber() -> anyhow::Result<()> {
6267
.with(
6368
tracing_subscriber::fmt::layer()
6469
.json()
65-
.with_current_span(false),
70+
.with_current_span(false)
71+
.with_filter(fmt_filter),
6672
)
6773
.with(telemetry_layer);
6874

@@ -73,7 +79,8 @@ pub fn init_subscriber() -> anyhow::Result<()> {
7379
let subscriber = Registry::default().with(env_filter).with(
7480
tracing_subscriber::fmt::layer()
7581
.json()
76-
.with_current_span(false),
82+
.with_current_span(false)
83+
.with_filter(fmt_filter),
7784
);
7885

7986
// Set the global subscriber

0 commit comments

Comments
 (0)