From cf24a7affd5e0d96fd8326a0fe2b2e958e0bbc35 Mon Sep 17 00:00:00 2001 From: Lalit Date: Mon, 10 Jul 2023 23:22:10 -0700 Subject: [PATCH 01/17] proposal - initial commit --- opentelemetry-api/src/global/logs.rs | 5 + opentelemetry-api/src/logs/logger.rs | 7 ++ opentelemetry-api/src/logs/noop.rs | 2 + opentelemetry-appender-tracing/Cargo.toml | 2 +- opentelemetry-sdk/src/export/logs/mod.rs | 4 +- opentelemetry-sdk/src/logs/log_emitter.rs | 18 ++++ opentelemetry-sdk/src/logs/log_processor.rs | 16 ++- opentelemetry-user-events-logs/Cargo.toml | 5 +- .../src/logs/exporter.rs | 100 ++++++++++++++---- .../src/logs/reentrant_logprocessor.rs | 7 +- opentelemetry/Cargo.toml | 1 + 11 files changed, 141 insertions(+), 26 deletions(-) diff --git a/opentelemetry-api/src/global/logs.rs b/opentelemetry-api/src/global/logs.rs index 986679a412..fdb84c38aa 100644 --- a/opentelemetry-api/src/global/logs.rs +++ b/opentelemetry-api/src/global/logs.rs @@ -66,6 +66,11 @@ impl Logger for BoxedLogger { fn emit(&self, record: crate::logs::LogRecord) { self.0.emit(record) } + + #[cfg(feature = "logs_level_enabled")] + fn event_enabled(&self, level : crate::logs::Severity) -> bool { + self.0.event_enabled(level) + } } #[derive(Clone)] diff --git a/opentelemetry-api/src/logs/logger.rs b/opentelemetry-api/src/logs/logger.rs index 04c68d334d..1dbbbd5fe2 100644 --- a/opentelemetry-api/src/logs/logger.rs +++ b/opentelemetry-api/src/logs/logger.rs @@ -2,7 +2,11 @@ use std::borrow::Cow; use crate::{logs::LogRecord, KeyValue}; +#[cfg(feature = "logs_level_enabled")] +use super::Severity; + /// The interface for emitting [`LogRecord`]s. + pub trait Logger { /// Emit a [`LogRecord`]. If this `Logger` was created with /// `include_trace_context` set to `true`, the logger will set the record's @@ -12,6 +16,9 @@ pub trait Logger { /// [`Context`]: crate::Context /// [`TraceContext`]: crate::logs::TraceContext fn emit(&self, record: LogRecord); + + #[cfg(feature = "logs_level_enabled")] + fn event_enabled(&self, level : Severity) -> bool; } /// Interfaces that can create [`Logger`] instances. diff --git a/opentelemetry-api/src/logs/noop.rs b/opentelemetry-api/src/logs/noop.rs index 172b8ad3bb..b53968bd0b 100644 --- a/opentelemetry-api/src/logs/noop.rs +++ b/opentelemetry-api/src/logs/noop.rs @@ -37,4 +37,6 @@ pub struct NoopLogger(()); impl Logger for NoopLogger { fn emit(&self, _record: LogRecord) {} + #[cfg(feature = "logs_level_enabled")] + fn event_enabled(&self, _level : super::Severity) -> bool {true} } diff --git a/opentelemetry-appender-tracing/Cargo.toml b/opentelemetry-appender-tracing/Cargo.toml index 159cba41ec..a9846dc897 100644 --- a/opentelemetry-appender-tracing/Cargo.toml +++ b/opentelemetry-appender-tracing/Cargo.toml @@ -19,4 +19,4 @@ tracing-subscriber = { version = "0.3.0", default-features = false, features = [ once_cell = "1.13.0" [dev-dependencies] -opentelemetry-stdout = { path = "../opentelemetry-stdout", features = ["logs"] } \ No newline at end of file +opentelemetry-stdout = { path = "../opentelemetry-stdout", features = ["logs"] } diff --git a/opentelemetry-sdk/src/export/logs/mod.rs b/opentelemetry-sdk/src/export/logs/mod.rs index 3fc13fa8b5..275d5a9c8a 100644 --- a/opentelemetry-sdk/src/export/logs/mod.rs +++ b/opentelemetry-sdk/src/export/logs/mod.rs @@ -2,7 +2,7 @@ use crate::Resource; use async_trait::async_trait; use opentelemetry_api::{ - logs::{LogError, LogRecord, LogResult}, + logs::{LogError, LogRecord, LogResult, Severity}, InstrumentationLibrary, }; use std::{borrow::Cow, fmt::Debug}; @@ -14,6 +14,8 @@ pub trait LogExporter: Send + Debug { async fn export(&mut self, batch: Vec) -> LogResult<()>; /// Shuts down the expoter. fn shutdown(&mut self) {} + /// Chek if logs are enabled. + fn event_enabled(&self, _name: &str, _level: Severity) -> bool {true} } /// `LogData` associates a [`LogRecord`] with a [`Resource`] and diff --git a/opentelemetry-sdk/src/logs/log_emitter.rs b/opentelemetry-sdk/src/logs/log_emitter.rs index 83b576e7ab..24c48246ef 100644 --- a/opentelemetry-sdk/src/logs/log_emitter.rs +++ b/opentelemetry-sdk/src/logs/log_emitter.rs @@ -9,6 +9,10 @@ use opentelemetry_api::{ trace::TraceContextExt, Context, InstrumentationLibrary, }; + +#[cfg(feature = "logs_level_enabled")] +use opentelemetry_api::logs::Severity; + use std::{ borrow::Cow, sync::{Arc, Weak}, @@ -228,4 +232,18 @@ impl opentelemetry_api::logs::Logger for Logger { processor.emit(data); } } + + #[cfg(feature = "logs_level_enabled")] + fn event_enabled(&self, level : Severity) -> bool { + let provider = match self.provider() { + Some(provider) => provider, + None => return false, + }; + + let mut enabled = false; + for processor in provider.log_processors() { + enabled = enabled || processor.event_enabled(self.instrumentation_lib.name.as_ref(), level) + } + enabled + } } diff --git a/opentelemetry-sdk/src/logs/log_processor.rs b/opentelemetry-sdk/src/logs/log_processor.rs index aee42b443f..4f73978757 100644 --- a/opentelemetry-sdk/src/logs/log_processor.rs +++ b/opentelemetry-sdk/src/logs/log_processor.rs @@ -11,6 +11,8 @@ use opentelemetry_api::{ global, logs::{LogError, LogResult}, }; +#[cfg(feature = "logs_level_enabled")] +use opentelemetry_api::logs::Severity; use std::thread; use std::{ fmt::{self, Debug, Formatter}, @@ -27,6 +29,9 @@ pub trait LogProcessor: Send + Sync + Debug { fn force_flush(&self) -> LogResult<()>; /// Shuts down the processor. fn shutdown(&mut self) -> LogResult<()>; + #[cfg(feature = "logs_level_enabled")] + /// Check if logging is enabled + fn event_enabled(&self, name: &str, level: Severity) -> bool; } /// A [`LogProcessor`] that exports synchronously when logs are emitted. @@ -93,9 +98,13 @@ impl LogProcessor for SimpleLogProcessor { ))) } } - Ok(()) } + + #[cfg(feature = "logs_level_enabled")] + fn event_enabled(&self, _name: &str, _level: Severity) -> bool { + true + } } /// A [`LogProcessor`] that asynchronously buffers log records and reports @@ -121,6 +130,11 @@ impl> LogProcessor for BatchLogProcessor { } } + #[cfg(feature = "logs_level_enabled")] + fn event_enabled(&self, _name: &str, _level: Severity) -> bool { + true + } + fn force_flush(&self) -> LogResult<()> { let (res_sender, res_receiver) = oneshot::channel(); self.message_sender diff --git a/opentelemetry-user-events-logs/Cargo.toml b/opentelemetry-user-events-logs/Cargo.toml index f89175eddf..9fcad4dd72 100644 --- a/opentelemetry-user-events-logs/Cargo.toml +++ b/opentelemetry-user-events-logs/Cargo.toml @@ -3,8 +3,8 @@ name = "opentelemetry-user-events-logs" description = "OpenTelemetry-Rust exporter to userevents" version = "0.1.0" edition = "2021" -homepage = "https://github.com/open-telemetry/opentelemetry-rust/tree/main/opentelemetry-user-events-logs" -repository = "https://github.com/open-telemetry/opentelemetry-rust/tree/main/opentelemetry-user-events-logs" +homepage = "https://github.com/open-telemetry/opentelemetry-rust/tree/main/opentelemetry-userevents-exporter" +repository = "https://github.com/open-telemetry/opentelemetry-rust/tree/main/opentelemetry-userevents-exporter" readme = "README.md" rust-version = "1.68.0" keywords = ["opentelemetry", "log", "trace", "user_events"] @@ -24,4 +24,5 @@ opentelemetry-appender-tracing = { path = "../opentelemetry-appender-tracing" } tracing = { version = "0.1.37", default-features = false, features = ["std"] } tracing-core = "0.1.31" tracing-subscriber = { version = "0.3.0", default-features = false, features = ["registry", "std"] } +microbench = "0.5.0" diff --git a/opentelemetry-user-events-logs/src/logs/exporter.rs b/opentelemetry-user-events-logs/src/logs/exporter.rs index 354b1830c4..c83d2904b7 100644 --- a/opentelemetry-user-events-logs/src/logs/exporter.rs +++ b/opentelemetry-user-events-logs/src/logs/exporter.rs @@ -1,6 +1,8 @@ use async_trait::async_trait; use eventheader::{FieldFormat, Level, Opcode}; use eventheader_dynamic::EventBuilder; +use opentelemetry_sdk::export; +use std::collections::HashMap; use std::borrow::Cow; use std::fmt::Debug; use std::sync::Arc; @@ -17,18 +19,36 @@ thread_local! { static EBW: RefCell = RefCell::new(EventBuilder::n #[derive(Debug)] pub struct ExporterConfig { /// keyword associated with user_events name - pub keyword: u64, + pub keywords_map: HashMap, + pub default_keyword : u64 } impl Default for ExporterConfig { fn default() -> Self { - ExporterConfig { keyword: 1 } + ExporterConfig { keywords_map: HashMap::new(), default_keyword: 1} } } impl ExporterConfig { - pub(crate) fn get_log_event_keyword(&self) -> u64 { - self.keyword + pub(crate) fn get_log_keyword(&self, name :&str) -> Option { + match self.keywords_map.get(name) { + Some(value) => Some(*value), + _ => None + } + } + + pub(crate) fn get_log_keywork_or_default(&self, name:&str) -> Option { + let mut keyword = None; + if self.keywords_map.len() == 0 { + keyword = Some(self.default_keyword); + } + else { + keyword = match self.get_log_keyword(name) { + Some(x) => Some(x), + _ => None + } + } + keyword } } @@ -51,57 +71,66 @@ impl UserEventsExporter { options = *options.group_name(provider_name); let mut eventheader_provider: eventheader_dynamic::Provider = eventheader_dynamic::Provider::new(provider_name, &options); + if exporter_config.keywords_map.len() == 0 { + println!("Register default keyworkd {}", exporter_config.default_keyword); + Self::register_events(&mut eventheader_provider, exporter_config.default_keyword) + } + for keyword in exporter_config.keywords_map.values().into_iter() { + Self::register_events(&mut eventheader_provider, *keyword) + } + UserEventsExporter { + provider: Arc::new(eventheader_provider), + exporter_config, + } + } + + fn register_events(eventheader_provider: &mut eventheader_dynamic::Provider, keyword : u64){ eventheader_provider.register_set( eventheader::Level::Informational, - exporter_config.get_log_event_keyword(), + keyword ); eventheader_provider.register_set( eventheader::Level::Verbose, - exporter_config.get_log_event_keyword(), + keyword ); eventheader_provider.register_set( eventheader::Level::Warning, - exporter_config.get_log_event_keyword(), + keyword ); eventheader_provider.register_set( eventheader::Level::Error, - exporter_config.get_log_event_keyword(), + keyword ); eventheader_provider.register_set( eventheader::Level::CriticalError, - exporter_config.get_log_event_keyword(), + keyword ); eventheader_provider.create_unregistered( true, eventheader::Level::Informational, - exporter_config.get_log_event_keyword(), + keyword, ); eventheader_provider.create_unregistered( true, eventheader::Level::Verbose, - exporter_config.get_log_event_keyword(), + keyword, ); eventheader_provider.create_unregistered( true, eventheader::Level::Warning, - exporter_config.get_log_event_keyword(), + keyword, ); eventheader_provider.create_unregistered( true, eventheader::Level::Error, - exporter_config.get_log_event_keyword(), + keyword, ); eventheader_provider.create_unregistered( true, eventheader::Level::CriticalError, - exporter_config.get_log_event_keyword(), + keyword, ); - - UserEventsExporter { - provider: Arc::new(eventheader_provider), - exporter_config, - } } fn add_attributes_to_event( @@ -180,9 +209,16 @@ impl UserEventsExporter { if log_data.record.severity_number.is_some() { level = self.get_serverity_level(log_data.record.severity_number.unwrap()); } + + let keyword = self.exporter_config.get_log_keywork_or_default(log_data.instrumentation.name.as_ref()); + + if keyword == None { + return Ok(()); + } + let log_es = if let Some(es) = self.provider.find_set( level.as_int().into(), - self.exporter_config.get_log_event_keyword(), + keyword.unwrap() ) { es } else { @@ -342,4 +378,28 @@ impl opentelemetry_sdk::export::logs::LogExporter for UserEventsExporter { } Ok(()) } + + fn event_enabled(&self, name: &str, level: Severity) -> bool { + + //print!("LALIT:event-enabled check for {} and {:?}", name, level); + + let (found, keyword) = if self.exporter_config.keywords_map.len() == 0 { + (true, self.exporter_config.default_keyword) + } else { + match self.exporter_config.get_log_keyword(name) { + Some(x) => (true, x), + _ => (false, 0) + } + }; + if !found { + return false; + } + + let es = self.provider.find_set(self.get_serverity_level(level), keyword); + match es { + Some(x) => x.enabled(), + _ => false, + }; + false + } } diff --git a/opentelemetry-user-events-logs/src/logs/reentrant_logprocessor.rs b/opentelemetry-user-events-logs/src/logs/reentrant_logprocessor.rs index 19ccf3c48a..eee8f55333 100644 --- a/opentelemetry-user-events-logs/src/logs/reentrant_logprocessor.rs +++ b/opentelemetry-user-events-logs/src/logs/reentrant_logprocessor.rs @@ -1,7 +1,7 @@ use std::fmt::Debug; use opentelemetry_api::logs::LogResult; -use opentelemetry_sdk::export::logs::LogData; +use opentelemetry_sdk::export::logs::{LogData, LogExporter}; use crate::logs::exporter::ExporterConfig; use crate::logs::exporter::*; @@ -45,4 +45,9 @@ impl opentelemetry_sdk::logs::LogProcessor for ReentrantLogProcessor { fn shutdown(&mut self) -> LogResult<()> { Ok(()) } + + #[cfg(feature = "logs_level_enabled")] + fn event_enabled(&self, name: &str, level: opentelemetry_api::logs::Severity) -> bool { + self.event_exporter.event_enabled(name, level) + } } diff --git a/opentelemetry/Cargo.toml b/opentelemetry/Cargo.toml index 953ae608a0..81f3b58018 100644 --- a/opentelemetry/Cargo.toml +++ b/opentelemetry/Cargo.toml @@ -32,6 +32,7 @@ default = ["trace"] trace = ["opentelemetry_api/trace", "opentelemetry_sdk/trace", "opentelemetry-stdout/trace"] metrics = ["opentelemetry_api/metrics", "opentelemetry_sdk/metrics", "opentelemetry-stdout/metrics"] logs = ["opentelemetry_sdk/logs"] +logs_level_enabled = ["logs"] testing = ["opentelemetry_api/testing", "opentelemetry_sdk/testing"] rt-tokio = ["opentelemetry_sdk/rt-tokio"] rt-tokio-current-thread = ["opentelemetry_sdk/rt-tokio-current-thread"] From 0710bcfa9f1b741101557f215f9ba25a47b34a56 Mon Sep 17 00:00:00 2001 From: Lalit Date: Mon, 10 Jul 2023 23:24:35 -0700 Subject: [PATCH 02/17] fix lint --- opentelemetry-api/src/global/logs.rs | 2 +- opentelemetry-api/src/logs/logger.rs | 2 +- opentelemetry-api/src/logs/noop.rs | 4 +- opentelemetry-sdk/src/export/logs/mod.rs | 5 +- opentelemetry-sdk/src/logs/log_emitter.rs | 5 +- opentelemetry-sdk/src/logs/log_processor.rs | 4 +- .../src/logs/exporter.rs | 103 +++++++----------- .../src/logs/reentrant_logprocessor.rs | 2 +- 8 files changed, 53 insertions(+), 74 deletions(-) diff --git a/opentelemetry-api/src/global/logs.rs b/opentelemetry-api/src/global/logs.rs index fdb84c38aa..fc41792d39 100644 --- a/opentelemetry-api/src/global/logs.rs +++ b/opentelemetry-api/src/global/logs.rs @@ -68,7 +68,7 @@ impl Logger for BoxedLogger { } #[cfg(feature = "logs_level_enabled")] - fn event_enabled(&self, level : crate::logs::Severity) -> bool { + fn event_enabled(&self, level: crate::logs::Severity) -> bool { self.0.event_enabled(level) } } diff --git a/opentelemetry-api/src/logs/logger.rs b/opentelemetry-api/src/logs/logger.rs index 1dbbbd5fe2..5489e25302 100644 --- a/opentelemetry-api/src/logs/logger.rs +++ b/opentelemetry-api/src/logs/logger.rs @@ -18,7 +18,7 @@ pub trait Logger { fn emit(&self, record: LogRecord); #[cfg(feature = "logs_level_enabled")] - fn event_enabled(&self, level : Severity) -> bool; + fn event_enabled(&self, level: Severity) -> bool; } /// Interfaces that can create [`Logger`] instances. diff --git a/opentelemetry-api/src/logs/noop.rs b/opentelemetry-api/src/logs/noop.rs index b53968bd0b..1e7911971a 100644 --- a/opentelemetry-api/src/logs/noop.rs +++ b/opentelemetry-api/src/logs/noop.rs @@ -38,5 +38,7 @@ pub struct NoopLogger(()); impl Logger for NoopLogger { fn emit(&self, _record: LogRecord) {} #[cfg(feature = "logs_level_enabled")] - fn event_enabled(&self, _level : super::Severity) -> bool {true} + fn event_enabled(&self, _level: super::Severity) -> bool { + true + } } diff --git a/opentelemetry-sdk/src/export/logs/mod.rs b/opentelemetry-sdk/src/export/logs/mod.rs index 275d5a9c8a..40a40048e6 100644 --- a/opentelemetry-sdk/src/export/logs/mod.rs +++ b/opentelemetry-sdk/src/export/logs/mod.rs @@ -14,8 +14,11 @@ pub trait LogExporter: Send + Debug { async fn export(&mut self, batch: Vec) -> LogResult<()>; /// Shuts down the expoter. fn shutdown(&mut self) {} + #[cfg(feature = "logs_level_enabled")] /// Chek if logs are enabled. - fn event_enabled(&self, _name: &str, _level: Severity) -> bool {true} + fn event_enabled(&self, _name: &str, _level: Severity) -> bool { + true + } } /// `LogData` associates a [`LogRecord`] with a [`Resource`] and diff --git a/opentelemetry-sdk/src/logs/log_emitter.rs b/opentelemetry-sdk/src/logs/log_emitter.rs index 24c48246ef..bfea532d7e 100644 --- a/opentelemetry-sdk/src/logs/log_emitter.rs +++ b/opentelemetry-sdk/src/logs/log_emitter.rs @@ -234,7 +234,7 @@ impl opentelemetry_api::logs::Logger for Logger { } #[cfg(feature = "logs_level_enabled")] - fn event_enabled(&self, level : Severity) -> bool { + fn event_enabled(&self, level: Severity) -> bool { let provider = match self.provider() { Some(provider) => provider, None => return false, @@ -242,7 +242,8 @@ impl opentelemetry_api::logs::Logger for Logger { let mut enabled = false; for processor in provider.log_processors() { - enabled = enabled || processor.event_enabled(self.instrumentation_lib.name.as_ref(), level) + enabled = + enabled || processor.event_enabled(self.instrumentation_lib.name.as_ref(), level) } enabled } diff --git a/opentelemetry-sdk/src/logs/log_processor.rs b/opentelemetry-sdk/src/logs/log_processor.rs index 4f73978757..13e74ba1ea 100644 --- a/opentelemetry-sdk/src/logs/log_processor.rs +++ b/opentelemetry-sdk/src/logs/log_processor.rs @@ -7,12 +7,12 @@ use futures_util::{ future::{self, Either}, {pin_mut, stream, StreamExt as _}, }; +#[cfg(feature = "logs_level_enabled")] +use opentelemetry_api::logs::Severity; use opentelemetry_api::{ global, logs::{LogError, LogResult}, }; -#[cfg(feature = "logs_level_enabled")] -use opentelemetry_api::logs::Severity; use std::thread; use std::{ fmt::{self, Debug, Formatter}, diff --git a/opentelemetry-user-events-logs/src/logs/exporter.rs b/opentelemetry-user-events-logs/src/logs/exporter.rs index c83d2904b7..4c38e8b05d 100644 --- a/opentelemetry-user-events-logs/src/logs/exporter.rs +++ b/opentelemetry-user-events-logs/src/logs/exporter.rs @@ -2,8 +2,8 @@ use async_trait::async_trait; use eventheader::{FieldFormat, Level, Opcode}; use eventheader_dynamic::EventBuilder; use opentelemetry_sdk::export; -use std::collections::HashMap; use std::borrow::Cow; +use std::collections::HashMap; use std::fmt::Debug; use std::sync::Arc; @@ -20,32 +20,34 @@ thread_local! { static EBW: RefCell = RefCell::new(EventBuilder::n pub struct ExporterConfig { /// keyword associated with user_events name pub keywords_map: HashMap, - pub default_keyword : u64 + pub default_keyword: u64, } impl Default for ExporterConfig { fn default() -> Self { - ExporterConfig { keywords_map: HashMap::new(), default_keyword: 1} + ExporterConfig { + keywords_map: HashMap::new(), + default_keyword: 1, + } } } impl ExporterConfig { - pub(crate) fn get_log_keyword(&self, name :&str) -> Option { + pub(crate) fn get_log_keyword(&self, name: &str) -> Option { match self.keywords_map.get(name) { Some(value) => Some(*value), - _ => None + _ => None, } } - pub(crate) fn get_log_keywork_or_default(&self, name:&str) -> Option { + pub(crate) fn get_log_keywork_or_default(&self, name: &str) -> Option { let mut keyword = None; if self.keywords_map.len() == 0 { keyword = Some(self.default_keyword); - } - else { + } else { keyword = match self.get_log_keyword(name) { Some(x) => Some(x), - _ => None + _ => None, } } keyword @@ -72,7 +74,10 @@ impl UserEventsExporter { let mut eventheader_provider: eventheader_dynamic::Provider = eventheader_dynamic::Provider::new(provider_name, &options); if exporter_config.keywords_map.len() == 0 { - println!("Register default keyworkd {}", exporter_config.default_keyword); + println!( + "Register default keyworkd {}", + exporter_config.default_keyword + ); Self::register_events(&mut eventheader_provider, exporter_config.default_keyword) } for keyword in exporter_config.keywords_map.values().into_iter() { @@ -84,53 +89,18 @@ impl UserEventsExporter { } } - fn register_events(eventheader_provider: &mut eventheader_dynamic::Provider, keyword : u64){ - eventheader_provider.register_set( - eventheader::Level::Informational, - keyword - ); - eventheader_provider.register_set( - eventheader::Level::Verbose, - keyword - ); - eventheader_provider.register_set( - eventheader::Level::Warning, - keyword - ); - eventheader_provider.register_set( - eventheader::Level::Error, - keyword - ); - eventheader_provider.register_set( - eventheader::Level::CriticalError, - keyword - ); - - eventheader_provider.create_unregistered( - true, - eventheader::Level::Informational, - keyword, - ); - eventheader_provider.create_unregistered( - true, - eventheader::Level::Verbose, - keyword, - ); - eventheader_provider.create_unregistered( - true, - eventheader::Level::Warning, - keyword, - ); - eventheader_provider.create_unregistered( - true, - eventheader::Level::Error, - keyword, - ); - eventheader_provider.create_unregistered( - true, - eventheader::Level::CriticalError, - keyword, - ); + fn register_events(eventheader_provider: &mut eventheader_dynamic::Provider, keyword: u64) { + eventheader_provider.register_set(eventheader::Level::Informational, keyword); + eventheader_provider.register_set(eventheader::Level::Verbose, keyword); + eventheader_provider.register_set(eventheader::Level::Warning, keyword); + eventheader_provider.register_set(eventheader::Level::Error, keyword); + eventheader_provider.register_set(eventheader::Level::CriticalError, keyword); + + eventheader_provider.create_unregistered(true, eventheader::Level::Informational, keyword); + eventheader_provider.create_unregistered(true, eventheader::Level::Verbose, keyword); + eventheader_provider.create_unregistered(true, eventheader::Level::Warning, keyword); + eventheader_provider.create_unregistered(true, eventheader::Level::Error, keyword); + eventheader_provider.create_unregistered(true, eventheader::Level::CriticalError, keyword); } fn add_attributes_to_event( @@ -210,16 +180,18 @@ impl UserEventsExporter { level = self.get_serverity_level(log_data.record.severity_number.unwrap()); } - let keyword = self.exporter_config.get_log_keywork_or_default(log_data.instrumentation.name.as_ref()); + let keyword = self + .exporter_config + .get_log_keywork_or_default(log_data.instrumentation.name.as_ref()); if keyword == None { return Ok(()); } - let log_es = if let Some(es) = self.provider.find_set( - level.as_int().into(), - keyword.unwrap() - ) { + let log_es = if let Some(es) = self + .provider + .find_set(level.as_int().into(), keyword.unwrap()) + { es } else { return Ok(()); @@ -380,7 +352,6 @@ impl opentelemetry_sdk::export::logs::LogExporter for UserEventsExporter { } fn event_enabled(&self, name: &str, level: Severity) -> bool { - //print!("LALIT:event-enabled check for {} and {:?}", name, level); let (found, keyword) = if self.exporter_config.keywords_map.len() == 0 { @@ -388,14 +359,16 @@ impl opentelemetry_sdk::export::logs::LogExporter for UserEventsExporter { } else { match self.exporter_config.get_log_keyword(name) { Some(x) => (true, x), - _ => (false, 0) + _ => (false, 0), } }; if !found { return false; } - let es = self.provider.find_set(self.get_serverity_level(level), keyword); + let es = self + .provider + .find_set(self.get_serverity_level(level), keyword); match es { Some(x) => x.enabled(), _ => false, diff --git a/opentelemetry-user-events-logs/src/logs/reentrant_logprocessor.rs b/opentelemetry-user-events-logs/src/logs/reentrant_logprocessor.rs index eee8f55333..8e4691b190 100644 --- a/opentelemetry-user-events-logs/src/logs/reentrant_logprocessor.rs +++ b/opentelemetry-user-events-logs/src/logs/reentrant_logprocessor.rs @@ -45,7 +45,7 @@ impl opentelemetry_sdk::logs::LogProcessor for ReentrantLogProcessor { fn shutdown(&mut self) -> LogResult<()> { Ok(()) } - + #[cfg(feature = "logs_level_enabled")] fn event_enabled(&self, name: &str, level: opentelemetry_api::logs::Severity) -> bool { self.event_exporter.event_enabled(name, level) From a12271abc59bd5f047e4740cd2cd68e7f59c57da Mon Sep 17 00:00:00 2001 From: Lalit Date: Tue, 11 Jul 2023 22:51:47 -0700 Subject: [PATCH 03/17] fix comments --- opentelemetry-sdk/src/export/logs/mod.rs | 4 +++- opentelemetry-user-events-logs/examples/basic.rs | 6 +++++- .../src/logs/exporter.rs | 14 +++++--------- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/opentelemetry-sdk/src/export/logs/mod.rs b/opentelemetry-sdk/src/export/logs/mod.rs index 40a40048e6..76b8e09f13 100644 --- a/opentelemetry-sdk/src/export/logs/mod.rs +++ b/opentelemetry-sdk/src/export/logs/mod.rs @@ -1,8 +1,10 @@ //! Log exporters use crate::Resource; use async_trait::async_trait; +#[cfg(feature = "logs_level_enabled")] +use opentelemetry_api::logs::Severity; use opentelemetry_api::{ - logs::{LogError, LogRecord, LogResult, Severity}, + logs::{LogError, LogRecord, LogResult}, InstrumentationLibrary, }; use std::{borrow::Cow, fmt::Debug}; diff --git a/opentelemetry-user-events-logs/examples/basic.rs b/opentelemetry-user-events-logs/examples/basic.rs index 8b110bb5bd..c022b37f95 100644 --- a/opentelemetry-user-events-logs/examples/basic.rs +++ b/opentelemetry-user-events-logs/examples/basic.rs @@ -3,11 +3,15 @@ use opentelemetry_appender_tracing::layer; use opentelemetry_sdk::logs::LoggerProvider; use opentelemetry_user_events_logs::{ExporterConfig, ReentrantLogProcessor}; +use std::collections::HashMap; use tracing::error; use tracing_subscriber::prelude::*; fn init_logger() -> LoggerProvider { - let exporter_config = ExporterConfig { keyword: 1 }; + let exporter_config = ExporterConfig { + default_keyword: 1, + keywords_map: HashMap::new(), + }; let reenterant_processor = ReentrantLogProcessor::new("test", None, exporter_config); LoggerProvider::builder() .with_log_processor(reenterant_processor) diff --git a/opentelemetry-user-events-logs/src/logs/exporter.rs b/opentelemetry-user-events-logs/src/logs/exporter.rs index 4c38e8b05d..82adfd13a6 100644 --- a/opentelemetry-user-events-logs/src/logs/exporter.rs +++ b/opentelemetry-user-events-logs/src/logs/exporter.rs @@ -20,6 +20,7 @@ thread_local! { static EBW: RefCell = RefCell::new(EventBuilder::n pub struct ExporterConfig { /// keyword associated with user_events name pub keywords_map: HashMap, + /// default keyword if map is not defined. pub default_keyword: u64, } @@ -40,7 +41,7 @@ impl ExporterConfig { } } - pub(crate) fn get_log_keywork_or_default(&self, name: &str) -> Option { + pub(crate) fn get_log_keyword_or_default(&self, name: &str) -> Option { let mut keyword = None; if self.keywords_map.len() == 0 { keyword = Some(self.default_keyword); @@ -75,7 +76,7 @@ impl UserEventsExporter { eventheader_dynamic::Provider::new(provider_name, &options); if exporter_config.keywords_map.len() == 0 { println!( - "Register default keyworkd {}", + "Register default keyword {}", exporter_config.default_keyword ); Self::register_events(&mut eventheader_provider, exporter_config.default_keyword) @@ -95,12 +96,6 @@ impl UserEventsExporter { eventheader_provider.register_set(eventheader::Level::Warning, keyword); eventheader_provider.register_set(eventheader::Level::Error, keyword); eventheader_provider.register_set(eventheader::Level::CriticalError, keyword); - - eventheader_provider.create_unregistered(true, eventheader::Level::Informational, keyword); - eventheader_provider.create_unregistered(true, eventheader::Level::Verbose, keyword); - eventheader_provider.create_unregistered(true, eventheader::Level::Warning, keyword); - eventheader_provider.create_unregistered(true, eventheader::Level::Error, keyword); - eventheader_provider.create_unregistered(true, eventheader::Level::CriticalError, keyword); } fn add_attributes_to_event( @@ -182,7 +177,7 @@ impl UserEventsExporter { let keyword = self .exporter_config - .get_log_keywork_or_default(log_data.instrumentation.name.as_ref()); + .get_log_keyword_or_default(log_data.instrumentation.name.as_ref()); if keyword == None { return Ok(()); @@ -351,6 +346,7 @@ impl opentelemetry_sdk::export::logs::LogExporter for UserEventsExporter { Ok(()) } + #[cfg(feature = "logs_level_enabled")] fn event_enabled(&self, name: &str, level: Severity) -> bool { //print!("LALIT:event-enabled check for {} and {:?}", name, level); From 081054596204e16fd40ea0e703ee9b96ae935609 Mon Sep 17 00:00:00 2001 From: Lalit Date: Tue, 11 Jul 2023 23:37:39 -0700 Subject: [PATCH 04/17] fix lints --- .../src/logs/exporter.rs | 23 ++++++------------- .../src/logs/reentrant_logprocessor.rs | 2 +- 2 files changed, 8 insertions(+), 17 deletions(-) diff --git a/opentelemetry-user-events-logs/src/logs/exporter.rs b/opentelemetry-user-events-logs/src/logs/exporter.rs index 82adfd13a6..5a12c7d68d 100644 --- a/opentelemetry-user-events-logs/src/logs/exporter.rs +++ b/opentelemetry-user-events-logs/src/logs/exporter.rs @@ -1,7 +1,6 @@ use async_trait::async_trait; use eventheader::{FieldFormat, Level, Opcode}; use eventheader_dynamic::EventBuilder; -use opentelemetry_sdk::export; use std::borrow::Cow; use std::collections::HashMap; use std::fmt::Debug; @@ -35,23 +34,15 @@ impl Default for ExporterConfig { impl ExporterConfig { pub(crate) fn get_log_keyword(&self, name: &str) -> Option { - match self.keywords_map.get(name) { - Some(value) => Some(*value), - _ => None, - } + self.keywords_map.get(name).copied() } pub(crate) fn get_log_keyword_or_default(&self, name: &str) -> Option { - let mut keyword = None; - if self.keywords_map.len() == 0 { - keyword = Some(self.default_keyword); + if self.keywords_map.is_empty() { + Some(self.default_keyword) } else { - keyword = match self.get_log_keyword(name) { - Some(x) => Some(x), - _ => None, - } + self.get_log_keyword(name) } - keyword } } @@ -74,14 +65,14 @@ impl UserEventsExporter { options = *options.group_name(provider_name); let mut eventheader_provider: eventheader_dynamic::Provider = eventheader_dynamic::Provider::new(provider_name, &options); - if exporter_config.keywords_map.len() == 0 { + if exporter_config.keywords_map.is_empty() { println!( "Register default keyword {}", exporter_config.default_keyword ); Self::register_events(&mut eventheader_provider, exporter_config.default_keyword) } - for keyword in exporter_config.keywords_map.values().into_iter() { + for keyword in exporter_config.keywords_map.values() { Self::register_events(&mut eventheader_provider, *keyword) } UserEventsExporter { @@ -179,7 +170,7 @@ impl UserEventsExporter { .exporter_config .get_log_keyword_or_default(log_data.instrumentation.name.as_ref()); - if keyword == None { + if keyword.is_none() { return Ok(()); } diff --git a/opentelemetry-user-events-logs/src/logs/reentrant_logprocessor.rs b/opentelemetry-user-events-logs/src/logs/reentrant_logprocessor.rs index 8e4691b190..c3f949b999 100644 --- a/opentelemetry-user-events-logs/src/logs/reentrant_logprocessor.rs +++ b/opentelemetry-user-events-logs/src/logs/reentrant_logprocessor.rs @@ -1,7 +1,7 @@ use std::fmt::Debug; use opentelemetry_api::logs::LogResult; -use opentelemetry_sdk::export::logs::{LogData, LogExporter}; +use opentelemetry_sdk::export::logs::LogData; use crate::logs::exporter::ExporterConfig; use crate::logs::exporter::*; From 03a832f19543e20766231f2b2cab68c62e194cad Mon Sep 17 00:00:00 2001 From: Lalit Date: Sun, 16 Jul 2023 23:14:38 -0700 Subject: [PATCH 05/17] fix tracing appender --- opentelemetry-appender-tracing/src/layer.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/opentelemetry-appender-tracing/src/layer.rs b/opentelemetry-appender-tracing/src/layer.rs index 1719a5223c..5e00d41dc9 100644 --- a/opentelemetry-appender-tracing/src/layer.rs +++ b/opentelemetry-appender-tracing/src/layer.rs @@ -112,6 +112,15 @@ where event.record(&mut visitor); self.logger.emit(log_record); } + + fn event_enabled( + &self, + _event: &tracing_core::Event<'_>, + _ctx: tracing_subscriber::layer::Context<'_, S>, + ) -> bool { + let severity = map_severity_to_otel_severity(_event.metadata().level().as_str()); + self.logger.event_enabled(severity) + } } fn map_severity_to_otel_severity(level: &str) -> Severity { From 3f5874621756bd4e23f1dc52ca5d559b4ce82097 Mon Sep 17 00:00:00 2001 From: Lalit Kumar Bhasin Date: Tue, 25 Jul 2023 18:35:21 +0000 Subject: [PATCH 06/17] add tokio-tracing enabled check under feature flag, remove debug logs --- opentelemetry-appender-tracing/src/layer.rs | 1 + opentelemetry-user-events-logs/Cargo.toml | 4 ++-- opentelemetry-user-events-logs/src/logs/exporter.rs | 3 --- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/opentelemetry-appender-tracing/src/layer.rs b/opentelemetry-appender-tracing/src/layer.rs index 5e00d41dc9..a1364e33eb 100644 --- a/opentelemetry-appender-tracing/src/layer.rs +++ b/opentelemetry-appender-tracing/src/layer.rs @@ -113,6 +113,7 @@ where self.logger.emit(log_record); } + #[cfg(feature = "logs_level_enabled")] fn event_enabled( &self, _event: &tracing_core::Event<'_>, diff --git a/opentelemetry-user-events-logs/Cargo.toml b/opentelemetry-user-events-logs/Cargo.toml index 9fcad4dd72..551699670f 100644 --- a/opentelemetry-user-events-logs/Cargo.toml +++ b/opentelemetry-user-events-logs/Cargo.toml @@ -3,8 +3,8 @@ name = "opentelemetry-user-events-logs" description = "OpenTelemetry-Rust exporter to userevents" version = "0.1.0" edition = "2021" -homepage = "https://github.com/open-telemetry/opentelemetry-rust/tree/main/opentelemetry-userevents-exporter" -repository = "https://github.com/open-telemetry/opentelemetry-rust/tree/main/opentelemetry-userevents-exporter" +homepage = "https://github.com/open-telemetry/opentelemetry-rust/tree/main/opentelemetry-user-events-logs" +repository = "https://github.com/open-telemetry/opentelemetry-rust/tree/main/opentelemetry-user-events-logs" readme = "README.md" rust-version = "1.68.0" keywords = ["opentelemetry", "log", "trace", "user_events"] diff --git a/opentelemetry-user-events-logs/src/logs/exporter.rs b/opentelemetry-user-events-logs/src/logs/exporter.rs index 5a12c7d68d..4c5679ad74 100644 --- a/opentelemetry-user-events-logs/src/logs/exporter.rs +++ b/opentelemetry-user-events-logs/src/logs/exporter.rs @@ -339,8 +339,6 @@ impl opentelemetry_sdk::export::logs::LogExporter for UserEventsExporter { #[cfg(feature = "logs_level_enabled")] fn event_enabled(&self, name: &str, level: Severity) -> bool { - //print!("LALIT:event-enabled check for {} and {:?}", name, level); - let (found, keyword) = if self.exporter_config.keywords_map.len() == 0 { (true, self.exporter_config.default_keyword) } else { @@ -352,7 +350,6 @@ impl opentelemetry_sdk::export::logs::LogExporter for UserEventsExporter { if !found { return false; } - let es = self .provider .find_set(self.get_serverity_level(level), keyword); From 78ed6fa114b259487ae79f09a0e463a2280c916c Mon Sep 17 00:00:00 2001 From: Lalit Kumar Bhasin Date: Tue, 25 Jul 2023 20:54:07 +0000 Subject: [PATCH 07/17] add both target and logger as enabled arguments --- opentelemetry-api/src/global/logs.rs | 4 ++-- opentelemetry-api/src/logs/logger.rs | 2 +- opentelemetry-sdk/src/logs/log_emitter.rs | 4 ++-- opentelemetry-sdk/src/logs/log_processor.rs | 6 +++--- opentelemetry-user-events-logs/src/logs/exporter.rs | 4 +++- 5 files changed, 11 insertions(+), 9 deletions(-) diff --git a/opentelemetry-api/src/global/logs.rs b/opentelemetry-api/src/global/logs.rs index bdd8510a35..e0b0da70c2 100644 --- a/opentelemetry-api/src/global/logs.rs +++ b/opentelemetry-api/src/global/logs.rs @@ -54,8 +54,8 @@ impl Logger for BoxedLogger { } #[cfg(feature = "logs_level_enabled")] - fn event_enabled(&self, level: crate::logs::Severity) -> bool { - self.0.event_enabled(level) + fn event_enabled(&self, level: crate::logs::Severity, target: &str) -> bool { + self.0.event_enabled(level, target) } } diff --git a/opentelemetry-api/src/logs/logger.rs b/opentelemetry-api/src/logs/logger.rs index 0cc8347009..a3f92155cf 100644 --- a/opentelemetry-api/src/logs/logger.rs +++ b/opentelemetry-api/src/logs/logger.rs @@ -16,7 +16,7 @@ pub trait Logger { fn emit(&self, record: LogRecord); #[cfg(feature = "logs_level_enabled")] - fn event_enabled(&self, level: Severity) -> bool; + fn event_enabled(&self, level: Severity, target: &str) -> bool; } /// Interfaces that can create [`Logger`] instances. diff --git a/opentelemetry-sdk/src/logs/log_emitter.rs b/opentelemetry-sdk/src/logs/log_emitter.rs index da67f133c9..28993334ab 100644 --- a/opentelemetry-sdk/src/logs/log_emitter.rs +++ b/opentelemetry-sdk/src/logs/log_emitter.rs @@ -231,7 +231,7 @@ impl opentelemetry_api::logs::Logger for Logger { } #[cfg(feature = "logs_level_enabled")] - fn event_enabled(&self, level: Severity) -> bool { + fn event_enabled(&self, level: Severity, target: &str) -> bool { let provider = match self.provider() { Some(provider) => provider, None => return false, @@ -240,7 +240,7 @@ impl opentelemetry_api::logs::Logger for Logger { let mut enabled = false; for processor in provider.log_processors() { enabled = - enabled || processor.event_enabled(self.instrumentation_lib.name.as_ref(), level) + enabled || processor.event_enabled(level, target, self.instrumentation_library()); } enabled } diff --git a/opentelemetry-sdk/src/logs/log_processor.rs b/opentelemetry-sdk/src/logs/log_processor.rs index 13e74ba1ea..d951c9f399 100644 --- a/opentelemetry-sdk/src/logs/log_processor.rs +++ b/opentelemetry-sdk/src/logs/log_processor.rs @@ -31,7 +31,7 @@ pub trait LogProcessor: Send + Sync + Debug { fn shutdown(&mut self) -> LogResult<()>; #[cfg(feature = "logs_level_enabled")] /// Check if logging is enabled - fn event_enabled(&self, name: &str, level: Severity) -> bool; + fn event_enabled(&self, level: Severity, target: &str, name: &str) -> bool; } /// A [`LogProcessor`] that exports synchronously when logs are emitted. @@ -102,7 +102,7 @@ impl LogProcessor for SimpleLogProcessor { } #[cfg(feature = "logs_level_enabled")] - fn event_enabled(&self, _name: &str, _level: Severity) -> bool { + fn event_enabled(&self, _level: Severity, _target: &str, _name: &str) -> bool { true } } @@ -131,7 +131,7 @@ impl> LogProcessor for BatchLogProcessor { } #[cfg(feature = "logs_level_enabled")] - fn event_enabled(&self, _name: &str, _level: Severity) -> bool { + fn event_enabled(&self, _level: Severity, _target: &str, _name: &str) -> bool { true } diff --git a/opentelemetry-user-events-logs/src/logs/exporter.rs b/opentelemetry-user-events-logs/src/logs/exporter.rs index cfb86cec80..9525937e75 100644 --- a/opentelemetry-user-events-logs/src/logs/exporter.rs +++ b/opentelemetry-user-events-logs/src/logs/exporter.rs @@ -18,6 +18,7 @@ thread_local! { static EBW: RefCell = RefCell::new(EventBuilder::n #[derive(Debug)] pub struct ExporterConfig { /// keyword associated with user_events name + /// These should be mapped to logger_name as of now. pub keywords_map: HashMap, /// default keyword if map is not defined. pub default_keyword: u64, @@ -338,10 +339,11 @@ impl opentelemetry_sdk::export::logs::LogExporter for UserEventsExporter { } #[cfg(feature = "logs_level_enabled")] - fn event_enabled(&self, name: &str, level: Severity) -> bool { + fn event_enabled(&self, level: Severity, target: &str, name: &str) -> bool { let (found, keyword) = if self.exporter_config.keywords_map.len() == 0 { (true, self.exporter_config.default_keyword) } else { + // TBD - target is not used as of now for comparison. match self.exporter_config.get_log_keyword(name) { Some(x) => (true, x), _ => (false, 0), From 8466741bb49da0cb6a3c3b37ce057abef756b213 Mon Sep 17 00:00:00 2001 From: Lalit Kumar Bhasin Date: Tue, 25 Jul 2023 17:29:17 -0700 Subject: [PATCH 08/17] fix build error --- opentelemetry-api/Cargo.toml | 1 + opentelemetry-api/src/logs/logger.rs | 1 + opentelemetry-api/src/logs/noop.rs | 2 +- opentelemetry-appender-tracing/src/layer.rs | 3 ++- opentelemetry-sdk/Cargo.toml | 1 + opentelemetry-sdk/src/export/logs/mod.rs | 6 +++--- opentelemetry-sdk/src/logs/log_emitter.rs | 8 ++++++-- opentelemetry-user-events-logs/Cargo.toml | 8 +++++++- opentelemetry-user-events-logs/src/logs/exporter.rs | 3 ++- .../src/logs/reentrant_logprocessor.rs | 12 ++++++++++-- 10 files changed, 34 insertions(+), 11 deletions(-) diff --git a/opentelemetry-api/Cargo.toml b/opentelemetry-api/Cargo.toml index 1e3e5d0d1e..3976ca14c5 100644 --- a/opentelemetry-api/Cargo.toml +++ b/opentelemetry-api/Cargo.toml @@ -31,3 +31,4 @@ trace = ["pin-project-lite"] metrics = [] testing = ["trace"] logs = [] +logs_level_enabled = ["logs"] diff --git a/opentelemetry-api/src/logs/logger.rs b/opentelemetry-api/src/logs/logger.rs index a3f92155cf..e7b06dd6ef 100644 --- a/opentelemetry-api/src/logs/logger.rs +++ b/opentelemetry-api/src/logs/logger.rs @@ -16,6 +16,7 @@ pub trait Logger { fn emit(&self, record: LogRecord); #[cfg(feature = "logs_level_enabled")] + /// Check if the given log level is enabled. fn event_enabled(&self, level: Severity, target: &str) -> bool; } diff --git a/opentelemetry-api/src/logs/noop.rs b/opentelemetry-api/src/logs/noop.rs index c9519938b8..55d3d617a3 100644 --- a/opentelemetry-api/src/logs/noop.rs +++ b/opentelemetry-api/src/logs/noop.rs @@ -41,7 +41,7 @@ pub struct NoopLogger(()); impl Logger for NoopLogger { fn emit(&self, _record: LogRecord) {} #[cfg(feature = "logs_level_enabled")] - fn event_enabled(&self, _level: super::Severity) -> bool { + fn event_enabled(&self, _level: super::Severity, _target: &str) -> bool { true } } diff --git a/opentelemetry-appender-tracing/src/layer.rs b/opentelemetry-appender-tracing/src/layer.rs index 8257e7e480..1bb4570659 100644 --- a/opentelemetry-appender-tracing/src/layer.rs +++ b/opentelemetry-appender-tracing/src/layer.rs @@ -114,7 +114,8 @@ where _ctx: tracing_subscriber::layer::Context<'_, S>, ) -> bool { let severity = map_severity_to_otel_severity(_event.metadata().level().as_str()); - self.logger.event_enabled(severity) + self.logger + .event_enabled(severity, _event.metadata().target()) } } diff --git a/opentelemetry-sdk/Cargo.toml b/opentelemetry-sdk/Cargo.toml index e9b89d197b..3ce6558448 100644 --- a/opentelemetry-sdk/Cargo.toml +++ b/opentelemetry-sdk/Cargo.toml @@ -45,6 +45,7 @@ default = ["trace"] trace = ["opentelemetry_api/trace", "crossbeam-channel", "rand", "async-trait", "percent-encoding"] jaeger_remote_sampler = ["trace", "opentelemetry-http", "http", "serde", "serde_json", "url"] logs = ["opentelemetry_api/logs", "crossbeam-channel", "async-trait", "serde_json"] +logs_level_enabled = ["logs", "opentelemetry_api/logs_level_enabled"] metrics = ["opentelemetry_api/metrics", "regex", "async-trait"] testing = ["opentelemetry_api/testing", "trace", "metrics", "logs", "rt-async-std", "rt-tokio", "rt-tokio-current-thread", "tokio/macros", "tokio/rt-multi-thread"] rt-tokio = ["tokio", "tokio-stream"] diff --git a/opentelemetry-sdk/src/export/logs/mod.rs b/opentelemetry-sdk/src/export/logs/mod.rs index 76b8e09f13..b6a71a8785 100644 --- a/opentelemetry-sdk/src/export/logs/mod.rs +++ b/opentelemetry-sdk/src/export/logs/mod.rs @@ -1,7 +1,7 @@ //! Log exporters use crate::Resource; use async_trait::async_trait; -#[cfg(feature = "logs_level_enabled")] +//#[cfg(feature = "logs_level_enabled")] use opentelemetry_api::logs::Severity; use opentelemetry_api::{ logs::{LogError, LogRecord, LogResult}, @@ -16,9 +16,9 @@ pub trait LogExporter: Send + Debug { async fn export(&mut self, batch: Vec) -> LogResult<()>; /// Shuts down the expoter. fn shutdown(&mut self) {} - #[cfg(feature = "logs_level_enabled")] + //#[cfg(feature = "logs_level_enabled")] /// Chek if logs are enabled. - fn event_enabled(&self, _name: &str, _level: Severity) -> bool { + fn event_enabled(&self, _level: Severity, _target: &str, _name: &str) -> bool { true } } diff --git a/opentelemetry-sdk/src/logs/log_emitter.rs b/opentelemetry-sdk/src/logs/log_emitter.rs index 28993334ab..ab208fafb2 100644 --- a/opentelemetry-sdk/src/logs/log_emitter.rs +++ b/opentelemetry-sdk/src/logs/log_emitter.rs @@ -239,8 +239,12 @@ impl opentelemetry_api::logs::Logger for Logger { let mut enabled = false; for processor in provider.log_processors() { - enabled = - enabled || processor.event_enabled(level, target, self.instrumentation_library()); + enabled = enabled + || processor.event_enabled( + level, + target, + self.instrumentation_library().name.as_ref(), + ); } enabled } diff --git a/opentelemetry-user-events-logs/Cargo.toml b/opentelemetry-user-events-logs/Cargo.toml index 551699670f..d32e5e84c3 100644 --- a/opentelemetry-user-events-logs/Cargo.toml +++ b/opentelemetry-user-events-logs/Cargo.toml @@ -24,5 +24,11 @@ opentelemetry-appender-tracing = { path = "../opentelemetry-appender-tracing" } tracing = { version = "0.1.37", default-features = false, features = ["std"] } tracing-core = "0.1.31" tracing-subscriber = { version = "0.3.0", default-features = false, features = ["registry", "std"] } -microbench = "0.5.0" +[features] +logs = ["opentelemetry_api/logs"] +logs_level_enabled = ["logs", "opentelemetry_api/logs_level_enabled"] + +[[example]] +name = "basic" +path = "examples/basic.rs" \ No newline at end of file diff --git a/opentelemetry-user-events-logs/src/logs/exporter.rs b/opentelemetry-user-events-logs/src/logs/exporter.rs index 9525937e75..a0cc2ddae1 100644 --- a/opentelemetry-user-events-logs/src/logs/exporter.rs +++ b/opentelemetry-user-events-logs/src/logs/exporter.rs @@ -339,7 +339,8 @@ impl opentelemetry_sdk::export::logs::LogExporter for UserEventsExporter { } #[cfg(feature = "logs_level_enabled")] - fn event_enabled(&self, level: Severity, target: &str, name: &str) -> bool { + fn event_enabled(&self, level: Severity, _target: &str, name: &str) -> bool { + println!("called"); let (found, keyword) = if self.exporter_config.keywords_map.len() == 0 { (true, self.exporter_config.default_keyword) } else { diff --git a/opentelemetry-user-events-logs/src/logs/reentrant_logprocessor.rs b/opentelemetry-user-events-logs/src/logs/reentrant_logprocessor.rs index c3f949b999..05971482de 100644 --- a/opentelemetry-user-events-logs/src/logs/reentrant_logprocessor.rs +++ b/opentelemetry-user-events-logs/src/logs/reentrant_logprocessor.rs @@ -3,6 +3,9 @@ use std::fmt::Debug; use opentelemetry_api::logs::LogResult; use opentelemetry_sdk::export::logs::LogData; +#[cfg(feature = "logs_level_enabled")] +use opentelemetry_sdk::export::logs::LogExporter; + use crate::logs::exporter::ExporterConfig; use crate::logs::exporter::*; @@ -47,7 +50,12 @@ impl opentelemetry_sdk::logs::LogProcessor for ReentrantLogProcessor { } #[cfg(feature = "logs_level_enabled")] - fn event_enabled(&self, name: &str, level: opentelemetry_api::logs::Severity) -> bool { - self.event_exporter.event_enabled(name, level) + fn event_enabled( + &self, + level: opentelemetry_api::logs::Severity, + target: &str, + name: &str, + ) -> bool { + self.event_exporter.event_enabled(level, target, name) } } From ccfea91b4899b05e0d156c5fa1f6460978223f4f Mon Sep 17 00:00:00 2001 From: Lalit Kumar Bhasin Date: Tue, 25 Jul 2023 20:20:29 -0700 Subject: [PATCH 09/17] fix lint --- opentelemetry-user-events-logs/src/logs/exporter.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/opentelemetry-user-events-logs/src/logs/exporter.rs b/opentelemetry-user-events-logs/src/logs/exporter.rs index a0cc2ddae1..c69d5202ee 100644 --- a/opentelemetry-user-events-logs/src/logs/exporter.rs +++ b/opentelemetry-user-events-logs/src/logs/exporter.rs @@ -162,6 +162,7 @@ impl UserEventsExporter { &self, log_data: &opentelemetry_sdk::export::logs::LogData, ) -> opentelemetry_sdk::export::logs::ExportResult { + println!("export_log_data called"); let mut level: Level = Level::Invalid; if log_data.record.severity_number.is_some() { level = self.get_serverity_level(log_data.record.severity_number.unwrap()); @@ -340,8 +341,8 @@ impl opentelemetry_sdk::export::logs::LogExporter for UserEventsExporter { #[cfg(feature = "logs_level_enabled")] fn event_enabled(&self, level: Severity, _target: &str, name: &str) -> bool { - println!("called"); - let (found, keyword) = if self.exporter_config.keywords_map.len() == 0 { + println!("event_enabled called"); + let (found, keyword) = if self.exporter_config.keywords_map.is_empty() { (true, self.exporter_config.default_keyword) } else { // TBD - target is not used as of now for comparison. From e0a10afe06f5d2755d1ae79e2cd7bcb3430b63e8 Mon Sep 17 00:00:00 2001 From: Lalit Kumar Bhasin Date: Tue, 25 Jul 2023 23:50:20 -0700 Subject: [PATCH 10/17] make feature flag default for tracing appender and user-events log exporter --- opentelemetry-appender-tracing/Cargo.toml | 5 +++++ opentelemetry-user-events-logs/Cargo.toml | 11 ++++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/opentelemetry-appender-tracing/Cargo.toml b/opentelemetry-appender-tracing/Cargo.toml index a9846dc897..f9adb15686 100644 --- a/opentelemetry-appender-tracing/Cargo.toml +++ b/opentelemetry-appender-tracing/Cargo.toml @@ -20,3 +20,8 @@ once_cell = "1.13.0" [dev-dependencies] opentelemetry-stdout = { path = "../opentelemetry-stdout", features = ["logs"] } + +[features] +logs_level_enabled = ["opentelemetry_api/logs_level_enabled", "opentelemetry_sdk/logs_level_enabled"] +default = ["logs_level_enabled"] + diff --git a/opentelemetry-user-events-logs/Cargo.toml b/opentelemetry-user-events-logs/Cargo.toml index d32e5e84c3..08151952d9 100644 --- a/opentelemetry-user-events-logs/Cargo.toml +++ b/opentelemetry-user-events-logs/Cargo.toml @@ -11,8 +11,8 @@ keywords = ["opentelemetry", "log", "trace", "user_events"] license = "Apache-2.0" [dependencies] -eventheader = "0.2" -eventheader_dynamic = "0.2" +eventheader = "0.3.2" +eventheader_dynamic = "0.3.2" opentelemetry_api = { version = "0.19", path = "../opentelemetry-api", features = ["logs"] } opentelemetry_sdk = { version = "0.19", path = "../opentelemetry-sdk", features = ["logs"] } async-std = { version="1.6" } @@ -24,11 +24,12 @@ opentelemetry-appender-tracing = { path = "../opentelemetry-appender-tracing" } tracing = { version = "0.1.37", default-features = false, features = ["std"] } tracing-core = "0.1.31" tracing-subscriber = { version = "0.3.0", default-features = false, features = ["registry", "std"] } +microbench = "0.5" [features] -logs = ["opentelemetry_api/logs"] -logs_level_enabled = ["logs", "opentelemetry_api/logs_level_enabled"] +logs_level_enabled = ["opentelemetry_api/logs_level_enabled", "opentelemetry_sdk/logs_level_enabled"] +default=["logs_level_enabled"] [[example]] name = "basic" -path = "examples/basic.rs" \ No newline at end of file +path = "examples/basic.rs" \ No newline at end of file From 67dd2bd07baf02742cc12f0b8d1e40414acdde7d Mon Sep 17 00:00:00 2001 From: Lalit Kumar Bhasin Date: Thu, 27 Jul 2023 15:18:12 -0700 Subject: [PATCH 11/17] add method for log crate --- opentelemetry-appender-log/Cargo.toml | 4 ++++ opentelemetry-appender-log/src/lib.rs | 7 ++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/opentelemetry-appender-log/Cargo.toml b/opentelemetry-appender-log/Cargo.toml index a54ede5057..105ffacbb1 100644 --- a/opentelemetry-appender-log/Cargo.toml +++ b/opentelemetry-appender-log/Cargo.toml @@ -13,3 +13,7 @@ edition = "2021" [dependencies] opentelemetry_api = { version = "0.19", path = "../opentelemetry-api", features = ["logs"]} log = {version = "0.4.17", features = ["kv_unstable", "std"]} + +[features] +logs_level_enabled = ["opentelemetry_api/logs_level_enabled"] +default = ["logs_level_enabled"] diff --git a/opentelemetry-appender-log/src/lib.rs b/opentelemetry-appender-log/src/lib.rs index 3598975bf0..e05bc95a2f 100644 --- a/opentelemetry-appender-log/src/lib.rs +++ b/opentelemetry-appender-log/src/lib.rs @@ -17,7 +17,12 @@ where L: Logger + Send + Sync, { fn enabled(&self, _metadata: &Metadata) -> bool { - // TODO: This should be dynamic instead of the current hardcoded value. + #[cfg(feature = "logs_level_enabled")] + return self.logger.event_enabled( + map_severity_to_otel_severity(_metadata.level()), + _metadata.target(), + ); + #[cfg(not(feature = "logs_level_enabled"))] true } From f9e2b4ee8eb8e73ce09477b4db2dbde3b60abd06 Mon Sep 17 00:00:00 2001 From: Lalit Kumar Bhasin Date: Thu, 27 Jul 2023 15:20:38 -0700 Subject: [PATCH 12/17] fix comment --- opentelemetry-user-events-logs/src/logs/exporter.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/opentelemetry-user-events-logs/src/logs/exporter.rs b/opentelemetry-user-events-logs/src/logs/exporter.rs index c69d5202ee..bdbd0d64da 100644 --- a/opentelemetry-user-events-logs/src/logs/exporter.rs +++ b/opentelemetry-user-events-logs/src/logs/exporter.rs @@ -341,7 +341,6 @@ impl opentelemetry_sdk::export::logs::LogExporter for UserEventsExporter { #[cfg(feature = "logs_level_enabled")] fn event_enabled(&self, level: Severity, _target: &str, name: &str) -> bool { - println!("event_enabled called"); let (found, keyword) = if self.exporter_config.keywords_map.is_empty() { (true, self.exporter_config.default_keyword) } else { From 208b1a25650e9fa882fa93a50f9a19e7c45d9325 Mon Sep 17 00:00:00 2001 From: Lalit Kumar Bhasin Date: Thu, 27 Jul 2023 15:22:50 -0700 Subject: [PATCH 13/17] rename method --- opentelemetry-user-events-logs/src/logs/exporter.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/opentelemetry-user-events-logs/src/logs/exporter.rs b/opentelemetry-user-events-logs/src/logs/exporter.rs index bdbd0d64da..8309301319 100644 --- a/opentelemetry-user-events-logs/src/logs/exporter.rs +++ b/opentelemetry-user-events-logs/src/logs/exporter.rs @@ -118,7 +118,7 @@ impl UserEventsExporter { } } - fn get_serverity_level(&self, severity: Severity) -> Level { + fn get_severity_level(&self, severity: Severity) -> Level { let level: Level = match severity { Severity::Debug | Severity::Debug2 @@ -165,7 +165,7 @@ impl UserEventsExporter { println!("export_log_data called"); let mut level: Level = Level::Invalid; if log_data.record.severity_number.is_some() { - level = self.get_serverity_level(log_data.record.severity_number.unwrap()); + level = self.get_severity_level(log_data.record.severity_number.unwrap()); } let keyword = self @@ -355,7 +355,7 @@ impl opentelemetry_sdk::export::logs::LogExporter for UserEventsExporter { } let es = self .provider - .find_set(self.get_serverity_level(level), keyword); + .find_set(self.get_severity_level(level), keyword); match es { Some(x) => x.enabled(), _ => false, From 7d1e0c7075b7c32d71211eaba2bb6c1039335fea Mon Sep 17 00:00:00 2001 From: Lalit Kumar Bhasin Date: Fri, 28 Jul 2023 19:06:56 +0000 Subject: [PATCH 14/17] remove println --- opentelemetry-user-events-logs/src/logs/exporter.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/opentelemetry-user-events-logs/src/logs/exporter.rs b/opentelemetry-user-events-logs/src/logs/exporter.rs index 8309301319..8e5a098deb 100644 --- a/opentelemetry-user-events-logs/src/logs/exporter.rs +++ b/opentelemetry-user-events-logs/src/logs/exporter.rs @@ -162,7 +162,6 @@ impl UserEventsExporter { &self, log_data: &opentelemetry_sdk::export::logs::LogData, ) -> opentelemetry_sdk::export::logs::ExportResult { - println!("export_log_data called"); let mut level: Level = Level::Invalid; if log_data.record.severity_number.is_some() { level = self.get_severity_level(log_data.record.severity_number.unwrap()); From 1b29785fcd4041b7c15aadfd65f9d35ed7ea2425 Mon Sep 17 00:00:00 2001 From: Lalit Kumar Bhasin Date: Sat, 29 Jul 2023 06:22:33 +0000 Subject: [PATCH 15/17] uncomment feature --- opentelemetry-sdk/src/export/logs/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opentelemetry-sdk/src/export/logs/mod.rs b/opentelemetry-sdk/src/export/logs/mod.rs index b6a71a8785..bc69930f04 100644 --- a/opentelemetry-sdk/src/export/logs/mod.rs +++ b/opentelemetry-sdk/src/export/logs/mod.rs @@ -16,7 +16,7 @@ pub trait LogExporter: Send + Debug { async fn export(&mut self, batch: Vec) -> LogResult<()>; /// Shuts down the expoter. fn shutdown(&mut self) {} - //#[cfg(feature = "logs_level_enabled")] + #[cfg(feature = "logs_level_enabled")] /// Chek if logs are enabled. fn event_enabled(&self, _level: Severity, _target: &str, _name: &str) -> bool { true From 4927868483c79e8fe51a8121d202b9c89b6c90e3 Mon Sep 17 00:00:00 2001 From: Lalit Kumar Bhasin Date: Sat, 29 Jul 2023 06:24:36 +0000 Subject: [PATCH 16/17] uncomment feature --- opentelemetry-sdk/src/export/logs/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opentelemetry-sdk/src/export/logs/mod.rs b/opentelemetry-sdk/src/export/logs/mod.rs index bc69930f04..aa82264c85 100644 --- a/opentelemetry-sdk/src/export/logs/mod.rs +++ b/opentelemetry-sdk/src/export/logs/mod.rs @@ -1,7 +1,7 @@ //! Log exporters use crate::Resource; use async_trait::async_trait; -//#[cfg(feature = "logs_level_enabled")] +#[cfg(feature = "logs_level_enabled")] use opentelemetry_api::logs::Severity; use opentelemetry_api::{ logs::{LogError, LogRecord, LogResult}, From ca467101ebb516a6f63172f15d4c747ee2b5aaad Mon Sep 17 00:00:00 2001 From: Lalit Kumar Bhasin Date: Sat, 29 Jul 2023 06:28:41 +0000 Subject: [PATCH 17/17] increment eventheader metrrics --- opentelemetry-user-events-metrics/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opentelemetry-user-events-metrics/Cargo.toml b/opentelemetry-user-events-metrics/Cargo.toml index 98fa04a2fd..ed7806ab9b 100644 --- a/opentelemetry-user-events-metrics/Cargo.toml +++ b/opentelemetry-user-events-metrics/Cargo.toml @@ -13,7 +13,7 @@ rust-version = "1.60" [dependencies] opentelemetry_api = { version = "0.19", path = "../opentelemetry-api", features = ["metrics"] } opentelemetry_sdk = { version = "0.19", path = "../opentelemetry-sdk", features = ["metrics", "rt-tokio"] } -eventheader = { version = "= 0.2.0" } +eventheader = { version = "= 0.3.2" } opentelemetry-proto = { version = "0.2", path = "../opentelemetry-proto", features = ["gen-tonic", "metrics"] } async-trait = "0.1" prost = "0.11"