Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions opentelemetry-appender-tracing/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@

## vNext

Fixes [1682](https://github.com/open-telemetry/opentelemetry-rust/issues/1682).
"spec_unstable_logs_enabled" feature now do not suppress logs for other layers.

## 0.28.1

Released 2025-Feb-12

- Bump `tracing-opentelemetry` to 0.29
- New experimental feature to use trace\_id & span\_id from spans created through the [tracing](https://crates.io/crates/tracing) crate (experimental_use_tracing_span_context) [#2438](https://github.com/open-telemetry/opentelemetry-rust/pull/2438)

- New *experimental* feature to use trace_id & span_id from spans created through the [tracing](https://crates.io/crates/tracing) crate (experimental_use_tracing_span_context) [#2438](https://github.com/open-telemetry/opentelemetry-rust/pull/2438)

## 0.28.0

Expand All @@ -27,6 +28,7 @@ Released 2024-Nov-11
- **Breaking** [2291](https://github.com/open-telemetry/opentelemetry-rust/pull/2291) Rename `logs_level_enabled flag` to `spec_unstable_logs_enabled`. Please enable this updated flag if the feature is needed. This flag will be removed once the feature is stabilized in the specifications.

## v0.26.0

Released 2024-Sep-30

- Update `opentelemetry` dependency version to 0.26
Expand All @@ -45,7 +47,7 @@ Released 2024-Sep-30
Exporters might use the target to override the instrumentation scope, which previously contained "opentelemetry-appender-tracing".

- **Breaking** [1928](https://github.com/open-telemetry/opentelemetry-rust/pull/1928) Insert tracing event name into LogRecord::event_name instead of attributes.
- If using a custom exporter, then they must serialize this field directly from LogRecord::event_name instead of iterating over the attributes. OTLP Exporter is modified to handle this.
- If using a custom exporter, then they must serialize this field directly from LogRecord::event_name instead of iterating over the attributes. OTLP Exporter is modified to handle this.
- Update `opentelemetry` dependency version to 0.24

## v0.4.0
Expand Down
1 change: 0 additions & 1 deletion opentelemetry-appender-tracing/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ pprof = { version = "0.14", features = ["flamegraph", "criterion"] }
default = []
experimental_metadata_attributes = ["dep:tracing-log"]
spec_unstable_logs_enabled = ["opentelemetry/spec_unstable_logs_enabled"]
# TODO - Enable this in 0.28.1 (once tracing-opentelemetry v0.29 is released)
experimental_use_tracing_span_context = ["tracing-opentelemetry"]


Expand Down
47 changes: 12 additions & 35 deletions opentelemetry-appender-tracing/benches/logs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ use criterion::{criterion_group, criterion_main, Criterion};
use opentelemetry::InstrumentationScope;
use opentelemetry_appender_tracing::layer as tracing_layer;
use opentelemetry_sdk::error::OTelSdkResult;
use opentelemetry_sdk::logs::{LogBatch, LogExporter};
use opentelemetry_sdk::logs::{LogProcessor, SdkLogRecord, SdkLoggerProvider};
use opentelemetry_sdk::Resource;
#[cfg(not(target_os = "windows"))]
Expand All @@ -27,40 +26,19 @@ use tracing_subscriber::prelude::*;
use tracing_subscriber::Layer;
use tracing_subscriber::Registry;

#[derive(Debug, Clone)]
struct NoopExporter {
enabled: bool,
}

impl LogExporter for NoopExporter {
#[allow(clippy::manual_async_fn)]
fn export(
&self,
_batch: LogBatch<'_>,
) -> impl std::future::Future<Output = OTelSdkResult> + Send {
async { OTelSdkResult::Ok(()) }
}

fn event_enabled(&self, _: opentelemetry::logs::Severity, _: &str, _: &str) -> bool {
self.enabled
}
}

#[derive(Debug)]
struct NoopProcessor<E: LogExporter> {
exporter: E,
struct NoopProcessor {
enabled: bool,
}

impl<E: LogExporter> NoopProcessor<E> {
fn new(exporter: E) -> Self {
Self { exporter }
impl NoopProcessor {
fn new(enabled: bool) -> Self {
Self { enabled }
}
}

impl<E: LogExporter> LogProcessor for NoopProcessor<E> {
fn emit(&self, _: &mut SdkLogRecord, _: &InstrumentationScope) {
// no-op
}
impl LogProcessor for NoopProcessor {
fn emit(&self, _: &mut SdkLogRecord, _: &InstrumentationScope) {}

fn force_flush(&self) -> OTelSdkResult {
Ok(())
Expand All @@ -72,11 +50,11 @@ impl<E: LogExporter> LogProcessor for NoopProcessor<E> {

fn event_enabled(
&self,
level: opentelemetry::logs::Severity,
target: &str,
name: &str,
_level: opentelemetry::logs::Severity,
_target: &str,
_name: &str,
) -> bool {
self.exporter.event_enabled(level, target, name)
self.enabled
}
}

Expand Down Expand Up @@ -126,8 +104,7 @@ fn benchmark_no_subscriber(c: &mut Criterion) {
}

fn benchmark_with_ot_layer(c: &mut Criterion, enabled: bool, bench_name: &str) {
let exporter = NoopExporter { enabled };
let processor = NoopProcessor::new(exporter);
let processor = NoopProcessor::new(enabled);
let provider = SdkLoggerProvider::builder()
.with_resource(
Resource::builder_empty()
Expand Down
23 changes: 10 additions & 13 deletions opentelemetry-appender-tracing/src/layer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,14 @@
event: &tracing::Event<'_>,
_ctx: tracing_subscriber::layer::Context<'_, S>,
) {
let severity = severity_of_level(event.metadata().level());
let target = event.metadata().target();
#[cfg(feature = "spec_unstable_logs_enabled")]
if !self.logger.event_enabled(severity, target) {
// TODO: See if we need internal logs or track the count.
return;

Check warning on line 166 in opentelemetry-appender-tracing/src/layer.rs

View check run for this annotation

Codecov / codecov/patch

opentelemetry-appender-tracing/src/layer.rs#L166

Added line #L166 was not covered by tests
}

#[cfg(feature = "experimental_metadata_attributes")]
let normalized_meta = event.normalized_metadata();

Expand All @@ -170,9 +178,9 @@
let mut log_record = self.logger.create_log_record();

// TODO: Fix heap allocation
log_record.set_target(meta.target().to_string());
log_record.set_target(target.to_string());
log_record.set_event_name(meta.name());
log_record.set_severity_number(severity_of_level(meta.level()));
log_record.set_severity_number(severity);
log_record.set_severity_text(meta.level().as_str());
let mut visitor = EventVisitor::new(&mut log_record);
#[cfg(feature = "experimental_metadata_attributes")]
Expand Down Expand Up @@ -203,17 +211,6 @@
//emit record
self.logger.emit(log_record);
}

#[cfg(feature = "spec_unstable_logs_enabled")]
fn event_enabled(
&self,
_event: &tracing_core::Event<'_>,
_ctx: tracing_subscriber::layer::Context<'_, S>,
) -> bool {
let severity = severity_of_level(_event.metadata().level());
self.logger
.event_enabled(severity, _event.metadata().target())
}
}

const fn severity_of_level(level: &Level) -> Severity {
Expand Down
Loading