aboutsummaryrefslogtreecommitdiff
path: root/src/logger.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/logger.rs')
-rw-r--r--src/logger.rs52
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)
+}