Skip to content

Commit 8f7a108

Browse files
committed
chore(appender-tracing): move the appender-tracing code to the contrib repo
1 parent 51eac97 commit 8f7a108

File tree

27 files changed

+71
-2658
lines changed

27 files changed

+71
-2658
lines changed

Cargo.toml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@ num_cpus = "1.15.0"
6767
opentelemetry = { path = "opentelemetry", version = "0.31", default-features = false }
6868
opentelemetry_sdk = { path = "opentelemetry-sdk", version = "0.31", default-features = false }
6969
opentelemetry-appender-log = { path = "opentelemetry-appender-log", version = "0.31", default-features = false }
70-
opentelemetry-appender-tracing = { path = "opentelemetry-appender-tracing", version = "0.31.1", default-features = false }
7170
opentelemetry-http = { path = "opentelemetry-http", version = "0.31", default-features = false }
7271
opentelemetry-jaeger-propagator = { path = "opentelemetry-jaeger-propagator", version = "0.31", default-features = false }
7372
opentelemetry-otlp = { path = "opentelemetry-otlp", version = "0.31", default-features = false }
@@ -81,7 +80,6 @@ sysinfo = "0.32"
8180
tempfile = "3.3.0"
8281
testcontainers = "0.23.1"
8382
tracing-log = "0.2"
84-
tracing-opentelemetry = "0.32"
8583
typed-builder = "0.20"
8684
uuid = "1.3"
8785
pprof = { version = "0.14", features = ["flamegraph", "criterion"] }

examples/logs-basic/Cargo.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,6 @@ bench = false
1515
[dependencies]
1616
opentelemetry_sdk = { workspace = true, features = ["logs"] }
1717
opentelemetry-stdout = { workspace = true, features = ["logs"] }
18-
opentelemetry-appender-tracing = { workspace = true }
19-
tracing = { workspace = true, features = ["std"]}
20-
tracing-subscriber = { workspace = true, features = ["env-filter","registry", "std", "fmt"] }
18+
opentelemetry-appender-log = { workspace = true }
19+
log = { workspace = true, features = ["std"] }
20+
tokio = { workspace = true, features = ["full"] }

examples/logs-basic/src/main.rs

Lines changed: 22 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,29 @@
1-
use opentelemetry_appender_tracing::layer;
2-
use opentelemetry_sdk::logs::SdkLoggerProvider;
3-
use opentelemetry_sdk::Resource;
4-
use tracing::error;
5-
use tracing_subscriber::{prelude::*, EnvFilter};
1+
use log::{error, info, warn, Level};
2+
use opentelemetry_appender_log::OpenTelemetryLogBridge;
3+
use opentelemetry_sdk::logs::{BatchLogProcessor, SdkLoggerProvider};
4+
use opentelemetry_stdout::LogExporter;
65

7-
fn main() {
8-
let exporter = opentelemetry_stdout::LogExporter::default();
9-
let provider: SdkLoggerProvider = SdkLoggerProvider::builder()
10-
.with_resource(
11-
Resource::builder()
12-
.with_service_name("log-appender-tracing-example")
13-
.build(),
14-
)
15-
.with_simple_exporter(exporter)
6+
#[tokio::main]
7+
async fn main() {
8+
//Create an exporter that writes to stdout
9+
let exporter = LogExporter::default();
10+
//Create a LoggerProvider and register the exporter
11+
let logger_provider = SdkLoggerProvider::builder()
12+
.with_log_processor(BatchLogProcessor::builder(exporter).build())
1613
.build();
1714

18-
// To prevent a telemetry-induced-telemetry loop, OpenTelemetry's own internal
19-
// logging is properly suppressed. However, logs emitted by external components
20-
// (such as reqwest, tonic, etc.) are not suppressed as they do not propagate
21-
// OpenTelemetry context. Until this issue is addressed
22-
// (https://github.com/open-telemetry/opentelemetry-rust/issues/2877),
23-
// filtering like this is the best way to suppress such logs.
24-
//
25-
// The filter levels are set as follows:
26-
// - Allow `info` level and above by default.
27-
// - Completely restrict logs from `hyper`, `tonic`, `h2`, and `reqwest`.
28-
//
29-
// Note: This filtering will also drop logs from these components even when
30-
// they are used outside of the OTLP Exporter.
31-
let filter_otel = EnvFilter::new("info")
32-
.add_directive("hyper=off".parse().unwrap())
33-
.add_directive("tonic=off".parse().unwrap())
34-
.add_directive("h2=off".parse().unwrap())
35-
.add_directive("reqwest=off".parse().unwrap());
36-
let otel_layer = layer::OpenTelemetryTracingBridge::new(&provider).with_filter(filter_otel);
15+
// Setup Log Appender for the log crate.
16+
let otel_log_appender = OpenTelemetryLogBridge::new(&logger_provider);
17+
log::set_boxed_logger(Box::new(otel_log_appender)).unwrap();
18+
log::set_max_level(Level::Info.to_level_filter());
3719

38-
// Create a new tracing::Fmt layer to print the logs to stdout. It has a
39-
// default filter of `info` level and above, and `debug` and above for logs
40-
// from OpenTelemetry crates. The filter levels can be customized as needed.
41-
let filter_fmt = EnvFilter::new("info").add_directive("opentelemetry=debug".parse().unwrap());
42-
let fmt_layer = tracing_subscriber::fmt::layer()
43-
.with_thread_names(true)
44-
.with_filter(filter_fmt);
20+
// Emit logs using macros from the log crate.
21+
let fruit = "apple";
22+
let price = 2.99;
4523

46-
tracing_subscriber::registry()
47-
.with(otel_layer)
48-
.with(fmt_layer)
49-
.init();
24+
error!(fruit, price; "hello from {fruit}. My price is {price}");
25+
warn!("warn!");
26+
info!("test log!");
5027

51-
error!(name: "my-event-name", target: "my-system", event_id = 20, user_name = "otel", user_email = "[email protected]", message = "This is an example message");
52-
let _ = provider.shutdown();
28+
let _ = logger_provider.shutdown();
5329
}

examples/tracing-http-propagator/Cargo.toml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,5 @@ opentelemetry_sdk = { workspace = true }
2929
opentelemetry-http = { workspace = true }
3030
opentelemetry-stdout = { workspace = true, features = ["trace", "logs"] }
3131
opentelemetry-semantic-conventions = { workspace = true }
32-
opentelemetry-appender-tracing = { workspace = true }
33-
tracing = { workspace = true, features = ["std"]}
34-
tracing-subscriber = { workspace = true, features = ["env-filter","registry", "std", "fmt"] }
32+
opentelemetry-appender-log = { workspace = true }
33+
log = { workspace = true, features = ["kv"]}

examples/tracing-http-propagator/src/client.rs

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
11
use http_body_util::Full;
22
use hyper_util::{client::legacy::Client, rt::TokioExecutor};
3+
use log::{info, Level};
34
use opentelemetry::{
45
global,
56
trace::{SpanKind, TraceContextExt, Tracer},
67
Context,
78
};
8-
use opentelemetry_appender_tracing::layer::OpenTelemetryTracingBridge;
9+
use opentelemetry_appender_log::OpenTelemetryLogBridge;
910
use opentelemetry_http::{Bytes, HeaderInjector};
1011
use opentelemetry_sdk::{
1112
logs::SdkLoggerProvider, propagation::TraceContextPropagator, trace::SdkTracerProvider,
1213
};
1314
use opentelemetry_stdout::{LogExporter, SpanExporter};
14-
use tracing::info;
15-
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
1615

1716
fn init_tracer() -> SdkTracerProvider {
1817
global::set_text_map_propagator(TraceContextPropagator::new());
@@ -32,11 +31,10 @@ fn init_logs() -> SdkLoggerProvider {
3231
let logger_provider = SdkLoggerProvider::builder()
3332
.with_simple_exporter(LogExporter::default())
3433
.build();
35-
let otel_layer = OpenTelemetryTracingBridge::new(&logger_provider);
36-
tracing_subscriber::registry()
37-
.with(otel_layer)
38-
.with(tracing_subscriber::filter::LevelFilter::INFO)
39-
.init();
34+
// Setup Log Appender for the log crate.
35+
let otel_log_appender = OpenTelemetryLogBridge::new(&logger_provider);
36+
log::set_boxed_logger(Box::new(otel_log_appender)).unwrap();
37+
log::set_max_level(Level::Info.to_level_filter());
4038

4139
logger_provider
4240
}
@@ -65,7 +63,7 @@ async fn send_request(
6563
.request(req.body(Full::new(Bytes::from(body_content.to_string())))?)
6664
.await?;
6765

68-
info!(name: "ResponseReceived", status = res.status().to_string(), message = "Response received");
66+
info!(name = "ResponseReceived", status:% = res.status(); "Response received");
6967

7068
Ok(())
7169
}

examples/tracing-http-propagator/src/server.rs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use http_body_util::{combinators::BoxBody, BodyExt, Full};
22
use hyper::{body::Incoming, service::service_fn, Request, Response, StatusCode};
33
use hyper_util::rt::{TokioExecutor, TokioIo};
4+
use log::{info, Level};
45
use opentelemetry::{
56
baggage::BaggageExt,
67
global::{self, BoxedTracer},
@@ -9,7 +10,7 @@ use opentelemetry::{
910
trace::{FutureExt, Span, SpanKind, TraceContextExt, Tracer},
1011
Context, InstrumentationScope, KeyValue,
1112
};
12-
use opentelemetry_appender_tracing::layer::OpenTelemetryTracingBridge;
13+
use opentelemetry_appender_log::OpenTelemetryLogBridge;
1314
use opentelemetry_http::{Bytes, HeaderExtractor};
1415
use opentelemetry_sdk::{
1516
error::OTelSdkResult,
@@ -22,8 +23,6 @@ use opentelemetry_stdout::{LogExporter, SpanExporter};
2223
use std::time::Duration;
2324
use std::{convert::Infallible, net::SocketAddr, sync::OnceLock};
2425
use tokio::net::TcpListener;
25-
use tracing::info;
26-
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
2726

2827
fn get_tracer() -> &'static BoxedTracer {
2928
static TRACER: OnceLock<BoxedTracer> = OnceLock::new();
@@ -46,7 +45,7 @@ async fn handle_health_check(
4645
.span_builder("health_check")
4746
.with_kind(SpanKind::Internal)
4847
.start(tracer);
49-
info!(name: "health_check", message = "Health check endpoint hit");
48+
info!(name = "health_check"; "Health check endpoint hit");
5049

5150
let res = Response::new(
5251
Full::new(Bytes::from_static(b"Server is up and running!"))
@@ -66,7 +65,7 @@ async fn handle_echo(
6665
.span_builder("echo")
6766
.with_kind(SpanKind::Internal)
6867
.start(tracer);
69-
info!(name = "echo", message = "Echo endpoint hit");
68+
info!(name = "echo"; "Echo endpoint hit");
7069

7170
let res = Response::new(req.into_body().boxed());
7271

@@ -86,7 +85,7 @@ async fn router(
8685
.with_kind(SpanKind::Server)
8786
.start_with_context(tracer, &parent_cx);
8887

89-
info!(name = "router", message = "Dispatching request");
88+
info!(name = "router"; "Dispatching request");
9089

9190
let cx = parent_cx.with_span(span);
9291
match (req.method(), req.uri().path()) {
@@ -173,8 +172,10 @@ fn init_logs() -> SdkLoggerProvider {
173172
.with_log_processor(EnrichWithBaggageLogProcessor)
174173
.with_simple_exporter(LogExporter::default())
175174
.build();
176-
let otel_layer = OpenTelemetryTracingBridge::new(&logger_provider);
177-
tracing_subscriber::registry().with(otel_layer).init();
175+
// Setup Log Appender for the log crate.
176+
let otel_log_appender = OpenTelemetryLogBridge::new(&logger_provider);
177+
log::set_boxed_logger(Box::new(otel_log_appender)).unwrap();
178+
log::set_max_level(Level::Info.to_level_filter());
178179

179180
logger_provider
180181
}

opentelemetry-appender-tracing/CHANGELOG.md

Lines changed: 0 additions & 166 deletions
This file was deleted.

0 commit comments

Comments
 (0)