diff --git a/opentelemetry-otlp/src/exporter/http/mod.rs b/opentelemetry-otlp/src/exporter/http/mod.rs index e7a284c33b..89b87f5d88 100644 --- a/opentelemetry-otlp/src/exporter/http/mod.rs +++ b/opentelemetry-otlp/src/exporter/http/mod.rs @@ -1038,15 +1038,15 @@ mod tests { use std::time::{Duration, SystemTime}; let span_context = SpanContext::new( - TraceId::from_u128(123), - SpanId::from_u64(456), + TraceId::from(123), + SpanId::from(456), TraceFlags::default(), false, TraceState::default(), ); SpanData { span_context, - parent_span_id: SpanId::from_u64(0), + parent_span_id: SpanId::from(0), span_kind: SpanKind::Internal, name: Cow::Borrowed("test_span"), start_time: SystemTime::UNIX_EPOCH, diff --git a/opentelemetry-sdk/CHANGELOG.md b/opentelemetry-sdk/CHANGELOG.md index db26a19dd6..32fa12db65 100644 --- a/opentelemetry-sdk/CHANGELOG.md +++ b/opentelemetry-sdk/CHANGELOG.md @@ -7,6 +7,12 @@ - **Fix**: Restore true parallel exports in the async-native `BatchSpanProcessor` by honoring `OTEL_BSP_MAX_CONCURRENT_EXPORTS` ([#2959](https://github.com/open-telemetry/opentelemetry-rust/pull/3028)). A regression in [#2685](https://github.com/open-telemetry/opentelemetry-rust/pull/2685) inadvertently awaited the `export()` future directly in `opentelemetry-sdk/src/trace/span_processor_with_async_runtime.rs` instead of spawning it on the runtime, forcing all exports to run sequentially. - **Feature**: Added `Clone` implementation to `SdkLogger` for API consistency with `SdkTracer` ([#3058](https://github.com/open-telemetry/opentelemetry-rust/issues/3058)). - **Fix**: batch size accounting in BatchSpanProcessor when queue is full ([#3089](https://github.com/open-telemetry/opentelemetry-rust/pull/3089)). +- **Fix**: Resolved dependency issue where the "logs" feature incorrectly + required the "trace" feature flag + ([#3096](https://github.com/open-telemetry/opentelemetry-rust/issues/3096)). + The logs functionality now operates independently, while automatic correlation + between logs and traces continues to work when the "trace" feature is + explicitly enabled. ## 0.30.0 diff --git a/opentelemetry-sdk/Cargo.toml b/opentelemetry-sdk/Cargo.toml index 204dbb7fa5..d1a217817e 100644 --- a/opentelemetry-sdk/Cargo.toml +++ b/opentelemetry-sdk/Cargo.toml @@ -42,7 +42,7 @@ pprof = { version = "0.14", features = ["flamegraph", "criterion"] } default = ["trace", "metrics", "logs", "internal-logs"] trace = ["opentelemetry/trace", "rand", "percent-encoding"] jaeger_remote_sampler = ["trace", "opentelemetry-http", "http", "serde", "serde_json", "url", "experimental_async_runtime"] -logs = ["opentelemetry/logs", "opentelemetry/trace", "serde_json"] +logs = ["opentelemetry/logs", "serde_json"] spec_unstable_logs_enabled = ["logs", "opentelemetry/spec_unstable_logs_enabled"] metrics = ["opentelemetry/metrics"] testing = ["opentelemetry/testing", "trace", "metrics", "logs", "rt-tokio", "rt-tokio-current-thread", "tokio/macros", "tokio/rt-multi-thread"] diff --git a/opentelemetry-sdk/src/logs/logger.rs b/opentelemetry-sdk/src/logs/logger.rs index f27ed35f78..860922adf0 100644 --- a/opentelemetry-sdk/src/logs/logger.rs +++ b/opentelemetry-sdk/src/logs/logger.rs @@ -1,5 +1,9 @@ -use super::{SdkLogRecord, SdkLoggerProvider, TraceContext}; -use opentelemetry::{trace::TraceContextExt, Context, InstrumentationScope}; +#[cfg(feature = "trace")] +use super::TraceContext; +use super::{SdkLogRecord, SdkLoggerProvider}; +#[cfg(feature = "trace")] +use opentelemetry::trace::TraceContextExt; +use opentelemetry::{Context, InstrumentationScope}; #[cfg(feature = "spec_unstable_logs_enabled")] use opentelemetry::logs::Severity; @@ -37,6 +41,7 @@ impl opentelemetry::logs::Logger for SdkLogger { //let mut log_record = record; if record.trace_context.is_none() { + #[cfg(feature = "trace")] Context::map_current(|cx| { cx.has_active_span().then(|| { record.trace_context = Some(TraceContext::from(cx.span().span_context())) diff --git a/opentelemetry-sdk/src/logs/logger_provider.rs b/opentelemetry-sdk/src/logs/logger_provider.rs index 1e9a40738a..e7de152807 100644 --- a/opentelemetry-sdk/src/logs/logger_provider.rs +++ b/opentelemetry-sdk/src/logs/logger_provider.rs @@ -283,21 +283,24 @@ impl LoggerProviderBuilder { #[cfg(test)] mod tests { + #[cfg(feature = "trace")] + use crate::logs::TraceContext; + #[cfg(feature = "trace")] + use crate::trace::SdkTracerProvider; use crate::{ - logs::{InMemoryLogExporter, LogBatch, SdkLogRecord, TraceContext}, + logs::{InMemoryLogExporter, LogBatch, SdkLogRecord}, resource::{ SERVICE_NAME, TELEMETRY_SDK_LANGUAGE, TELEMETRY_SDK_NAME, TELEMETRY_SDK_VERSION, }, - trace::SdkTracerProvider, Resource, }; use super::*; + use opentelemetry::logs::{AnyValue, LogRecord as _, Logger, LoggerProvider}; + #[cfg(feature = "trace")] + use opentelemetry::trace::TraceContextExt; + #[cfg(feature = "trace")] use opentelemetry::trace::{SpanId, TraceId, Tracer as _, TracerProvider}; - use opentelemetry::{ - logs::{AnyValue, LogRecord as _, Logger, LoggerProvider}, - trace::TraceContextExt, - }; use opentelemetry::{Key, KeyValue, Value}; use std::fmt::{Debug, Formatter}; use std::sync::atomic::AtomicU64; @@ -591,6 +594,7 @@ mod tests { } #[test] + #[cfg(feature = "trace")] fn trace_context_test() { let exporter = InMemoryLogExporter::default(); diff --git a/opentelemetry-sdk/src/logs/record.rs b/opentelemetry-sdk/src/logs/record.rs index da6d4ac0b2..746e0f5b9b 100644 --- a/opentelemetry-sdk/src/logs/record.rs +++ b/opentelemetry-sdk/src/logs/record.rs @@ -1,8 +1,9 @@ use crate::growable_array::GrowableArray; +#[cfg(feature = "trace")] +use opentelemetry::trace::SpanContext; use opentelemetry::{ logs::{AnyValue, Severity}, - trace::{SpanContext, SpanId, TraceFlags, TraceId}, - Key, + Key, SpanId, TraceFlags, TraceId, }; use std::{borrow::Cow, time::SystemTime}; @@ -216,6 +217,7 @@ pub struct TraceContext { pub trace_flags: Option, } +#[cfg(feature = "trace")] impl From<&SpanContext> for TraceContext { fn from(span_context: &SpanContext) -> Self { TraceContext {