diff --git a/src/config.rs b/src/config.rs index 291e072..19c6b01 100644 --- a/src/config.rs +++ b/src/config.rs @@ -12,7 +12,7 @@ use std::{ use opentelemetry_sdk::{ logs::LogProcessor, metrics::reader::MetricReader, - trace::{IdGenerator, SpanProcessor}, + trace::{IdGenerator, ShouldSample, SpanProcessor, TracerProviderBuilder}, }; use regex::Regex; use tracing::{Level, level_filters::LevelFilter}; @@ -373,6 +373,7 @@ pub struct AdvancedOptions { pub(crate) resources: Vec, pub(crate) log_record_processors: Vec, pub(crate) enable_tracing_metrics: bool, + pub(crate) trace_provider: TracerProviderBuilder, // // // TODO: arguments below supported by Python @@ -418,6 +419,13 @@ impl AdvancedOptions { self } + /// Add a custom sampler implementation + #[must_use] + pub fn with_sampler(mut self, sampler: T) -> Self { + self.trace_provider = self.trace_provider.with_sampler(sampler); + self + } + /// Support capturing tracing events as metrics as per [`tracing_opentelemetry::MetricsLayer`](https://docs.rs/tracing-opentelemetry/latest/tracing_opentelemetry/struct.MetricsLayer.html). #[must_use] pub fn with_tracing_metrics(mut self, enable: bool) -> Self { diff --git a/src/logfire.rs b/src/logfire.rs index e9b827a..7824b13 100644 --- a/src/logfire.rs +++ b/src/logfire.rs @@ -290,7 +290,7 @@ impl Logfire { SendToLogfire::No => false, }; - let mut tracer_provider_builder = SdkTracerProvider::builder(); + let mut tracer_provider_builder = advanced_options.trace_provider; let mut logger_provider_builder = SdkLoggerProvider::builder(); let mut meter_provider_builder = SdkMeterProvider::builder();