Skip to content

Commit 2997c4b

Browse files
authored
Show using tracing layer filters in examples (#2667)
1 parent 32a43ca commit 2997c4b

File tree

4 files changed

+67
-8
lines changed

4 files changed

+67
-8
lines changed

examples/logs-basic/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,4 @@ opentelemetry_sdk = { path = "../../opentelemetry-sdk", features = ["logs"] }
1010
opentelemetry-stdout = { path = "../../opentelemetry-stdout", features = ["logs"]}
1111
opentelemetry-appender-tracing = { path = "../../opentelemetry-appender-tracing", default-features = false}
1212
tracing = { workspace = true, features = ["std"]}
13-
tracing-subscriber = { workspace = true, features = ["registry", "std"] }
13+
tracing-subscriber = { workspace = true, features = ["env-filter","registry", "std", "fmt"] }

examples/logs-basic/src/main.rs

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use opentelemetry_appender_tracing::layer;
22
use opentelemetry_sdk::logs::SdkLoggerProvider;
33
use opentelemetry_sdk::Resource;
44
use tracing::error;
5-
use tracing_subscriber::prelude::*;
5+
use tracing_subscriber::{prelude::*, EnvFilter};
66

77
fn main() {
88
let exporter = opentelemetry_stdout::LogExporter::default();
@@ -14,8 +14,37 @@ fn main() {
1414
)
1515
.with_simple_exporter(exporter)
1616
.build();
17-
let layer = layer::OpenTelemetryTracingBridge::new(&provider);
18-
tracing_subscriber::registry().with(layer).init();
17+
18+
// For the OpenTelemetry layer, add a tracing filter to filter events from
19+
// OpenTelemetry and its dependent crates (opentelemetry-otlp uses crates
20+
// like reqwest/tonic etc.) from being sent back to OTel itself, thus
21+
// preventing infinite telemetry generation. The filter levels are set as
22+
// follows:
23+
// - Allow `info` level and above by default.
24+
// - Restrict `opentelemetry`, `hyper`, `tonic`, and `reqwest` completely.
25+
// Note: This will also drop events from crates like `tonic` etc. even when
26+
// they are used outside the OTLP Exporter. For more details, see:
27+
// https://github.com/open-telemetry/opentelemetry-rust/issues/761
28+
let filter_otel = EnvFilter::new("info")
29+
.add_directive("hyper=off".parse().unwrap())
30+
.add_directive("opentelemetry=off".parse().unwrap())
31+
.add_directive("tonic=off".parse().unwrap())
32+
.add_directive("h2=off".parse().unwrap())
33+
.add_directive("reqwest=off".parse().unwrap());
34+
let otel_layer = layer::OpenTelemetryTracingBridge::new(&provider).with_filter(filter_otel);
35+
36+
// Create a new tracing::Fmt layer to print the logs to stdout. It has a
37+
// default filter of `info` level and above, and `debug` and above for logs
38+
// from OpenTelemetry crates. The filter levels can be customized as needed.
39+
let filter_fmt = EnvFilter::new("info").add_directive("opentelemetry=debug".parse().unwrap());
40+
let fmt_layer = tracing_subscriber::fmt::layer()
41+
.with_thread_names(true)
42+
.with_filter(filter_fmt);
43+
44+
tracing_subscriber::registry()
45+
.with(otel_layer)
46+
.with(fmt_layer)
47+
.init();
1948

2049
error!(name: "my-event-name", target: "my-system", event_id = 20, user_name = "otel", user_email = "[email protected]", message = "This is an example message");
2150
let _ = provider.shutdown();

opentelemetry-appender-tracing/Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ tracing-opentelemetry = { version = "0.29", optional = true }
2323
log = { workspace = true }
2424
opentelemetry-stdout = { path = "../opentelemetry-stdout", features = ["logs"] }
2525
opentelemetry_sdk = { path = "../opentelemetry-sdk", features = ["logs", "testing"] }
26-
tracing-subscriber = { workspace = true, features = ["registry", "std", "env-filter"] }
26+
tracing = { workspace = true, features = ["std"]}
27+
tracing-subscriber = { workspace = true, features = ["env-filter","registry", "std", "fmt"] }
2728
tracing-log = "0.2"
2829
criterion = { workspace = true }
2930
tokio = { workspace = true, features = ["full"]}

opentelemetry-appender-tracing/examples/basic.rs

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
use opentelemetry_appender_tracing::layer;
44
use opentelemetry_sdk::{logs::SdkLoggerProvider, Resource};
55
use tracing::error;
6-
use tracing_subscriber::prelude::*;
6+
use tracing_subscriber::{prelude::*, EnvFilter};
77

88
fn main() {
99
let exporter = opentelemetry_stdout::LogExporter::default();
@@ -15,8 +15,37 @@ fn main() {
1515
)
1616
.with_simple_exporter(exporter)
1717
.build();
18-
let layer = layer::OpenTelemetryTracingBridge::new(&provider);
19-
tracing_subscriber::registry().with(layer).init();
18+
19+
// For the OpenTelemetry layer, add a tracing filter to filter events from
20+
// OpenTelemetry and its dependent crates (opentelemetry-otlp uses crates
21+
// like reqwest/tonic etc.) from being sent back to OTel itself, thus
22+
// preventing infinite telemetry generation. The filter levels are set as
23+
// follows:
24+
// - Allow `info` level and above by default.
25+
// - Restrict `opentelemetry`, `hyper`, `tonic`, and `reqwest` completely.
26+
// Note: This will also drop events from crates like `tonic` etc. even when
27+
// they are used outside the OTLP Exporter. For more details, see:
28+
// https://github.com/open-telemetry/opentelemetry-rust/issues/761
29+
let filter_otel = EnvFilter::new("info")
30+
.add_directive("hyper=off".parse().unwrap())
31+
.add_directive("opentelemetry=off".parse().unwrap())
32+
.add_directive("tonic=off".parse().unwrap())
33+
.add_directive("h2=off".parse().unwrap())
34+
.add_directive("reqwest=off".parse().unwrap());
35+
let otel_layer = layer::OpenTelemetryTracingBridge::new(&provider).with_filter(filter_otel);
36+
37+
// Create a new tracing::Fmt layer to print the logs to stdout. It has a
38+
// default filter of `info` level and above, and `debug` and above for logs
39+
// from OpenTelemetry crates. The filter levels can be customized as needed.
40+
let filter_fmt = EnvFilter::new("info").add_directive("opentelemetry=debug".parse().unwrap());
41+
let fmt_layer = tracing_subscriber::fmt::layer()
42+
.with_thread_names(true)
43+
.with_filter(filter_fmt);
44+
45+
tracing_subscriber::registry()
46+
.with(otel_layer)
47+
.with(fmt_layer)
48+
.init();
2049

2150
error!(name: "my-event-name", target: "my-system", event_id = 20, user_name = "otel", user_email = "[email protected]", message = "This is an example message");
2251
let _ = provider.shutdown();

0 commit comments

Comments
 (0)