//! run with `$ cargo run --example basic use opentelemetry_appender_tracing::layer; use opentelemetry_sdk::{logs::SdkLoggerProvider, Resource}; use tracing::error; use tracing_subscriber::{prelude::*, EnvFilter}; 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) .build(); // For the OpenTelemetry layer, add a tracing filter to filter events from // OpenTelemetry and its dependent crates (opentelemetry-otlp uses crates // like reqwest/tonic etc.) from being sent back to OTel itself, thus // preventing infinite telemetry generation. The filter levels are set as // follows: // - Allow `info` level and above by default. // - Restrict `opentelemetry`, `hyper`, `tonic`, and `reqwest` completely. // Note: This will also drop events from crates like `tonic` etc. even when // they are used outside the OTLP Exporter. For more details, see: // https://github.com/open-telemetry/opentelemetry-rust/issues/761 let filter_otel = EnvFilter::new("info") .add_directive("hyper=off".parse().unwrap()) .add_directive("opentelemetry=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); // 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); tracing_subscriber::registry() .with(otel_layer) .with(fmt_layer) .init(); error!(name: "my-event-name", target: "my-system", event_id = 20, user_name = "otel", user_email = "otel@opentelemetry.io", message = "This is an example message"); let _ = provider.shutdown(); }