Skip to content

Commit 2ce4108

Browse files
authored
Add log appender for tracing (open-telemetry#1085)
1 parent aa16193 commit 2ce4108

File tree

1 file changed

+66
-0
lines changed

1 file changed

+66
-0
lines changed

logs.rs

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
use opentelemetry_api::KeyValue;
2+
use opentelemetry_appender_tracing::layer;
3+
use opentelemetry_sdk::{
4+
logs::{Config, LoggerProvider},
5+
Resource,
6+
};
7+
use tracing::error;
8+
use tracing_subscriber::{prelude::*, Layer};
9+
10+
mod throughput;
11+
12+
struct NoopEventVisitor;
13+
14+
impl tracing::field::Visit for NoopEventVisitor {
15+
fn record_debug(&mut self, _field: &tracing::field::Field, _value: &dyn std::fmt::Debug) {}
16+
}
17+
18+
struct NoOpLogLayer;
19+
impl<S> Layer<S> for NoOpLogLayer
20+
where
21+
S: tracing::Subscriber,
22+
{
23+
fn on_event(
24+
&self,
25+
event: &tracing::Event<'_>,
26+
_ctx: tracing_subscriber::layer::Context<'_, S>,
27+
) {
28+
let mut visitor = NoopEventVisitor;
29+
event.record(&mut visitor);
30+
}
31+
32+
fn event_enabled(
33+
&self,
34+
_event: &tracing::Event<'_>,
35+
_ctx: tracing_subscriber::layer::Context<'_, S>,
36+
) -> bool {
37+
true
38+
}
39+
}
40+
41+
fn main() {
42+
// LoggerProvider without any exporter.
43+
let provider: LoggerProvider = LoggerProvider::builder()
44+
.with_config(
45+
Config::default().with_resource(Resource::new(vec![KeyValue::new(
46+
"service.name",
47+
"log-appender-tracing-example",
48+
)])),
49+
)
50+
.build();
51+
52+
// Use the OpenTelemetryTracingBridge to test the throughput of the appender-tracing.
53+
let layer = layer::OpenTelemetryTracingBridge::new(&provider);
54+
tracing_subscriber::registry().with(layer).init();
55+
56+
// Use a "Do-Nothing" layer to test the throughput of the tracing system without
57+
// OpenTelemetry overhead. This helps measure the OpenTelemetry overhead.
58+
// let noop_layer = NoOpLogLayer;
59+
// tracing_subscriber::registry().with(noop_layer).init();
60+
61+
throughput::test_throughput(test_log);
62+
}
63+
64+
fn test_log() {
65+
error!(target: "my-system", event_id = 20, event_name = "my-event_name", user_name = "otel", user_email = "otel@opentelemetry.io");
66+
}

0 commit comments

Comments
 (0)