53 lines
2.4 KiB
Rust
53 lines
2.4 KiB
Rust
//! 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();
|
|
}
|