diff options
Diffstat (limited to 'src/logger.rs')
-rw-r--r-- | src/logger.rs | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/logger.rs b/src/logger.rs new file mode 100644 index 0000000..964477f --- /dev/null +++ b/src/logger.rs @@ -0,0 +1,52 @@ +//! This module provides functionality to initialize and configure a logger that exports logs +//! using OpenTelemetry. The logger can be configured with different levels and exporter endpoints. +//! +//! # Functions +//! +//! - `init`: Initializes a new logger exported with OpenTelemetry. It sets up the logger provider, +//! configures the log appender, and sets the global logger. +//! - `http_exporter`: Creates a new HTTP exporter builder for OpenTelemetry. +use std::sync::Arc; + +use opentelemetry_appender_log::OpenTelemetryLogBridge; +use opentelemetry_otlp::LogExporter; +use opentelemetry_otlp::Protocol; +use opentelemetry_otlp::WithExportConfig; +use opentelemetry_sdk::logs::Logger; +use opentelemetry_sdk::logs::LoggerProvider; + +use crate::Opentelemetry; + +/// Initialize a new logger exported with open telemetry. +pub fn init( + manager: &mut Opentelemetry, +) -> anyhow::Result<OpenTelemetryLogBridge<LoggerProvider, Logger>, ()> { + let exporter = LogExporter::builder() + .with_http() + .with_endpoint("http://localhost:4318/v1/logs") + .with_protocol(Protocol::HttpBinary) + .build() + .unwrap(); + let provider = LoggerProvider::builder() + .with_batch_exporter(exporter, opentelemetry_sdk::runtime::Tokio) + .build(); + + // let logger_provider = opentelemetry_otlp::new_pipeline() + // .logging() + // .with_resource(Resource::new(vec![KeyValue::new( + // opentelemetry_semantic_conventions::resource::SERVICE_NAME, + // tag, + // )])) + // .with_batch_config(batch_config) + // .with_exporter( + // http_exporter() + // .with_protocol(Protocol::HttpBinary) //can be changed to `Protocol::HttpJson` to export in JSON format + // .with_endpoint(format!("{exporter_endpoint}/v1/logs")), + // ) + // .install_batch(opentelemetry_sdk::runtime::Tokio)?; + manager.logger = Some(Arc::new(provider.clone())); + + // Setup Log Appender for the log crate. + let logger = OpenTelemetryLogBridge::new(&provider); + Ok(logger) +} |