main
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<String>,
) -> 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<LogExporter, opentelemetry_otlp::ExporterBuildError> {
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()
}