blob: 964477f16a561fc98e36bed6ad24595309602920 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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)
}
|