Skip to content

Commit d387d09

Browse files
committed
fix example
1 parent 09a7898 commit d387d09

File tree

1 file changed

+29
-51
lines changed
  • examples/self-diagnostics/src

1 file changed

+29
-51
lines changed

examples/self-diagnostics/src/main.rs

Lines changed: 29 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@ use opentelemetry::KeyValue;
33
use opentelemetry_appender_tracing::layer;
44
use opentelemetry_otlp::{LogExporter, MetricExporter, WithExportConfig};
55
use opentelemetry_sdk::metrics::PeriodicReader;
6-
use tracing_subscriber::filter::EnvFilter;
7-
use tracing_subscriber::fmt;
86
use tracing_subscriber::prelude::*;
97

108
use std::error::Error;
@@ -48,62 +46,42 @@ fn init_logger_provider() -> opentelemetry_sdk::logs::LoggerProvider {
4846

4947
let cloned_provider = provider.clone();
5048

51-
// Add a tracing filter to filter events from crates used by opentelemetry-otlp.
52-
// The filter levels are set as follows:
53-
// - Allow `info` level and above by default.
54-
// - Restrict `hyper`, `tonic`, and `reqwest` to `error` level logs only.
55-
// This ensures events generated from these crates within the OTLP Exporter are not looped back,
56-
// thus preventing infinite event generation.
57-
// Note: This will also drop events from these crates used outside the OTLP Exporter.
58-
// For more details, see: https://github.com/open-telemetry/opentelemetry-rust/issues/761
59-
let filter = EnvFilter::new("info")
60-
.add_directive("hyper=error".parse().unwrap())
61-
.add_directive("tonic=error".parse().unwrap())
62-
.add_directive("reqwest=error".parse().unwrap());
63-
64-
// Filter for logs with "opentelemetry_" target prefix to use eprintln,
65-
// only if they haven't been logged before.
66-
let opentelemetry_filter = tracing_subscriber::filter::filter_fn(|metadata| {
67-
if metadata.target().starts_with("opentelemetry_") {
68-
// Ignore debug level logs
69-
if metadata.level() == &tracing::Level::DEBUG {
70-
return false;
71-
}
72-
let err = OtelError::Other(metadata.target().to_string()); // Convert target to an OtelError variant
73-
if !GLOBAL_ERROR_STATE.mark_as_seen(&err) {
74-
eprintln!(
75-
"[{}] - {}: {}",
76-
metadata.level(),
77-
metadata.target(),
78-
metadata.fields()
79-
);
80-
}
81-
false // Prevent these logs from propagating further
82-
} else {
83-
true // Allow other logs to continue
84-
}
49+
// Specialized filter for specific targets
50+
let specialized_filter = tracing_subscriber::filter::filter_fn(|metadata| {
51+
let target = metadata.target();
52+
53+
// Only allow ERROR logs from specific targets
54+
(target.starts_with("hyper")
55+
|| target.starts_with("hyper_util")
56+
|| target.starts_with("tonic")
57+
|| target.starts_with("tower")
58+
|| target.starts_with("reqwest")
59+
|| target.starts_with("opentelemetry_"))
60+
&& metadata.level() == &tracing::Level::ERROR
8561
});
86-
87-
// Layer for OpenTelemetry internal logs
88-
let fmt_opentelemetry_layer = fmt::layer().with_filter(opentelemetry_filter);
89-
90-
// Layer for application logs, excluding OpenTelemetry internal logs
91-
let fmt_application_layer = fmt::layer().with_filter(filter);
92-
93-
// Configures the appender tracing layer, filtering out OpenTelemetry internal logs
94-
// to prevent infinite logging loops.
95-
96-
let non_opentelemetry_filter = tracing_subscriber::filter::filter_fn(|metadata| {
97-
!metadata.target().starts_with("opentelemetry")
62+
// Configure fmt::Layer to print detailed log information, including structured fields
63+
let fmt_opentelemetry_layer =
64+
tracing_subscriber::fmt::layer().with_filter(specialized_filter.clone());
65+
66+
// Application filter to exclude specific targets entirely, regardless of level
67+
let application_filter = tracing_subscriber::filter::filter_fn(|metadata| {
68+
let target = metadata.target();
69+
70+
// Exclude logs from specific targets for the application layer
71+
!(target.starts_with("hyper")
72+
|| target.starts_with("hyper_util")
73+
|| target.starts_with("tonic")
74+
|| target.starts_with("tower")
75+
|| target.starts_with("reqwest")
76+
|| target.starts_with("opentelemetry"))
9877
});
9978

100-
let otel_layer = layer::OpenTelemetryTracingBridge::new(&cloned_provider)
101-
.with_filter(non_opentelemetry_filter.clone());
79+
let fmt_application_layer = layer::OpenTelemetryTracingBridge::new(&cloned_provider)
80+
.with_filter(application_filter.clone());
10281

10382
tracing_subscriber::registry()
10483
.with(fmt_opentelemetry_layer)
10584
.with(fmt_application_layer)
106-
.with(otel_layer)
10785
.init();
10886
provider
10987
}

0 commit comments

Comments
 (0)