Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,6 @@ num_cpus = "1.15.0"
opentelemetry = { path = "opentelemetry", version = "0.31", default-features = false }
opentelemetry_sdk = { path = "opentelemetry-sdk", version = "0.31", default-features = false }
opentelemetry-appender-log = { path = "opentelemetry-appender-log", version = "0.31", default-features = false }
opentelemetry-appender-tracing = { path = "opentelemetry-appender-tracing", version = "0.31.1", default-features = false }
opentelemetry-http = { path = "opentelemetry-http", version = "0.31", default-features = false }
opentelemetry-jaeger-propagator = { path = "opentelemetry-jaeger-propagator", version = "0.31", default-features = false }
opentelemetry-otlp = { path = "opentelemetry-otlp", version = "0.31", default-features = false }
Expand All @@ -81,7 +80,6 @@ sysinfo = "0.32"
tempfile = "3.3.0"
testcontainers = "0.23.1"
tracing-log = "0.2"
tracing-opentelemetry = "0.32"
typed-builder = "0.20"
uuid = "1.3"
pprof = { version = "0.14", features = ["flamegraph", "criterion"] }
Expand Down
6 changes: 3 additions & 3 deletions examples/logs-basic/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,6 @@ bench = false
[dependencies]
opentelemetry_sdk = { workspace = true, features = ["logs"] }
opentelemetry-stdout = { workspace = true, features = ["logs"] }
opentelemetry-appender-tracing = { workspace = true }
tracing = { workspace = true, features = ["std"]}
tracing-subscriber = { workspace = true, features = ["env-filter","registry", "std", "fmt"] }
opentelemetry-appender-log = { workspace = true }
log = { workspace = true, features = ["std"] }
tokio = { workspace = true, features = ["full"] }
68 changes: 22 additions & 46 deletions examples/logs-basic/src/main.rs
Original file line number Diff line number Diff line change
@@ -1,53 +1,29 @@
use opentelemetry_appender_tracing::layer;
use opentelemetry_sdk::logs::SdkLoggerProvider;
use opentelemetry_sdk::Resource;
use tracing::error;
use tracing_subscriber::{prelude::*, EnvFilter};
use log::{error, info, warn, Level};
use opentelemetry_appender_log::OpenTelemetryLogBridge;
use opentelemetry_sdk::logs::{BatchLogProcessor, SdkLoggerProvider};
use opentelemetry_stdout::LogExporter;

fn main() {
let exporter = opentelemetry_stdout::LogExporter::default();
let provider: SdkLoggerProvider = SdkLoggerProvider::builder()
.with_resource(
Resource::builder()
.with_service_name("log-appender-tracing-example")
.build(),
)
.with_simple_exporter(exporter)
#[tokio::main]
async fn main() {
//Create an exporter that writes to stdout
let exporter = LogExporter::default();
//Create a LoggerProvider and register the exporter
let logger_provider = SdkLoggerProvider::builder()
.with_log_processor(BatchLogProcessor::builder(exporter).build())
.build();

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

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

tracing_subscriber::registry()
.with(otel_layer)
.with(fmt_layer)
.init();
error!(fruit, price; "hello from {fruit}. My price is {price}");
warn!("warn!");
info!("test log!");

error!(name: "my-event-name", target: "my-system", event_id = 20, user_name = "otel", user_email = "[email protected]", message = "This is an example message");
let _ = provider.shutdown();
let _ = logger_provider.shutdown();
}
5 changes: 2 additions & 3 deletions examples/tracing-http-propagator/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,5 @@ opentelemetry_sdk = { workspace = true }
opentelemetry-http = { workspace = true }
opentelemetry-stdout = { workspace = true, features = ["trace", "logs"] }
opentelemetry-semantic-conventions = { workspace = true }
opentelemetry-appender-tracing = { workspace = true }
tracing = { workspace = true, features = ["std"]}
tracing-subscriber = { workspace = true, features = ["env-filter","registry", "std", "fmt"] }
opentelemetry-appender-log = { workspace = true }
log = { workspace = true, features = ["kv"]}
16 changes: 7 additions & 9 deletions examples/tracing-http-propagator/src/client.rs
Original file line number Diff line number Diff line change
@@ -1,18 +1,17 @@
use http_body_util::Full;
use hyper_util::{client::legacy::Client, rt::TokioExecutor};
use log::{info, Level};
use opentelemetry::{
global,
trace::{SpanKind, TraceContextExt, Tracer},
Context,
};
use opentelemetry_appender_tracing::layer::OpenTelemetryTracingBridge;
use opentelemetry_appender_log::OpenTelemetryLogBridge;
use opentelemetry_http::{Bytes, HeaderInjector};
use opentelemetry_sdk::{
logs::SdkLoggerProvider, propagation::TraceContextPropagator, trace::SdkTracerProvider,
};
use opentelemetry_stdout::{LogExporter, SpanExporter};
use tracing::info;
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};

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

logger_provider
}
Expand Down Expand Up @@ -65,7 +63,7 @@ async fn send_request(
.request(req.body(Full::new(Bytes::from(body_content.to_string())))?)
.await?;

info!(name: "ResponseReceived", status = res.status().to_string(), message = "Response received");
info!(name = "ResponseReceived", status:% = res.status(); "Response received");

Ok(())
}
Expand Down
17 changes: 9 additions & 8 deletions examples/tracing-http-propagator/src/server.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
use http_body_util::{combinators::BoxBody, BodyExt, Full};
use hyper::{body::Incoming, service::service_fn, Request, Response, StatusCode};
use hyper_util::rt::{TokioExecutor, TokioIo};
use log::{info, Level};
use opentelemetry::{
baggage::BaggageExt,
global::{self, BoxedTracer},
Expand All @@ -9,7 +10,7 @@ use opentelemetry::{
trace::{FutureExt, Span, SpanKind, TraceContextExt, Tracer},
Context, InstrumentationScope, KeyValue,
};
use opentelemetry_appender_tracing::layer::OpenTelemetryTracingBridge;
use opentelemetry_appender_log::OpenTelemetryLogBridge;
use opentelemetry_http::{Bytes, HeaderExtractor};
use opentelemetry_sdk::{
error::OTelSdkResult,
Expand All @@ -22,8 +23,6 @@ use opentelemetry_stdout::{LogExporter, SpanExporter};
use std::time::Duration;
use std::{convert::Infallible, net::SocketAddr, sync::OnceLock};
use tokio::net::TcpListener;
use tracing::info;
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};

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

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

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

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

info!(name = "router", message = "Dispatching request");
info!(name = "router"; "Dispatching request");

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

logger_provider
}
Expand Down
166 changes: 0 additions & 166 deletions opentelemetry-appender-tracing/CHANGELOG.md

This file was deleted.

Loading