use opentelemetry_otlp::{LogExporter, WithExportConfig, WithHttpConfig}; use opentelemetry_sdk::Resource; use opentelemetry_sdk::logs::SdkLoggerProvider; use crate::config::TelemetryConfig; pub fn build( config: &TelemetryConfig, resource: Resource, warnings: &mut Vec, ) -> SdkLoggerProvider { let mut builder = SdkLoggerProvider::builder().with_resource(resource); if let Some(endpoint) = config.logs_url() { match exporter(config, &endpoint) { Ok(exporter) => builder = builder.with_batch_exporter(exporter), Err(error) => warnings.push(format!( "otlp log exporter disabled: {error} (endpoint {endpoint})" )), } } builder.build() } fn exporter( config: &TelemetryConfig, endpoint: &str, ) -> Result { let mut builder = LogExporter::builder() .with_http() .with_endpoint(endpoint) .with_timeout(config.timeout); if !config.logs.headers.is_empty() { builder = builder.with_headers(config.logs.headers.clone()); } builder.build() }