Skip to content

Commit 7a51e75

Browse files
izquierdoTommyCpphdostcijothomas
authored
Use a builder pattern for loggers and tracers (#1567)
Co-authored-by: Zhongyang Wu <zhongyang.wu@outlook.com> Co-authored-by: Harold Dost <h.dost@criteo.com> Co-authored-by: Cijo Thomas <cijo.thomas@gmail.com> Co-authored-by: Cijo Thomas <cithomas@microsoft.com>
1 parent 6952f29 commit 7a51e75

File tree

18 files changed

+493
-121
lines changed

18 files changed

+493
-121
lines changed

opentelemetry-appender-log/src/lib.rs

+4-6
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,10 @@ where
4949
{
5050
pub fn new(provider: &P) -> Self {
5151
OpenTelemetryLogBridge {
52-
logger: provider.versioned_logger(
53-
"opentelemetry-log-appender",
54-
Some(Cow::Borrowed(env!("CARGO_PKG_VERSION"))),
55-
None,
56-
None,
57-
),
52+
logger: provider
53+
.logger_builder("opentelemetry-log-appender")
54+
.with_version(Cow::Borrowed(env!("CARGO_PKG_VERSION")))
55+
.build(),
5856
_phantom: Default::default(),
5957
}
6058
}

opentelemetry-appender-tracing/src/layer.rs

+4-6
Original file line numberDiff line numberDiff line change
@@ -138,12 +138,10 @@ where
138138
{
139139
pub fn new(provider: &P) -> Self {
140140
OpenTelemetryTracingBridge {
141-
logger: provider.versioned_logger(
142-
INSTRUMENTATION_LIBRARY_NAME,
143-
Some(Cow::Borrowed(env!("CARGO_PKG_VERSION"))),
144-
None,
145-
None,
146-
),
141+
logger: provider
142+
.logger_builder(INSTRUMENTATION_LIBRARY_NAME)
143+
.with_version(Cow::Borrowed(env!("CARGO_PKG_VERSION")))
144+
.build(),
147145
_phantom: Default::default(),
148146
}
149147
}

opentelemetry-jaeger/src/exporter/config/mod.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -85,13 +85,13 @@ fn build_config_and_process(
8585
pub(crate) fn install_tracer_provider_and_get_tracer(
8686
tracer_provider: TracerProvider,
8787
) -> Result<Tracer, TraceError> {
88-
let tracer = opentelemetry::trace::TracerProvider::versioned_tracer(
88+
let tracer = opentelemetry::trace::TracerProvider::tracer_builder(
8989
&tracer_provider,
9090
"opentelemetry-jaeger",
91-
Some(env!("CARGO_PKG_VERSION")),
92-
Some(semcov::SCHEMA_URL),
93-
None,
94-
);
91+
)
92+
.with_version(env!("CARGO_PKG_VERSION"))
93+
.with_schema_url(semcov::SCHEMA_URL)
94+
.build();
9595
let _ = global::set_tracer_provider(tracer_provider);
9696
Ok(tracer)
9797
}

opentelemetry-otlp/src/logs.rs

+8-12
Original file line numberDiff line numberDiff line change
@@ -183,12 +183,10 @@ fn build_simple_with_exporter(
183183
provider_builder = provider_builder.with_config(config);
184184
}
185185
let provider = provider_builder.build();
186-
let logger = provider.versioned_logger(
187-
Cow::Borrowed("opentelemetry-otlp"),
188-
Some(Cow::Borrowed(env!("CARGO_PKG_VERSION"))),
189-
None,
190-
None,
191-
);
186+
let logger = provider
187+
.logger_builder(Cow::Borrowed("opentelemetry-otlp"))
188+
.with_version(Cow::Borrowed(env!("CARGO_PKG_VERSION")))
189+
.build();
192190
let _ = global::set_logger_provider(provider);
193191
logger
194192
}
@@ -209,12 +207,10 @@ fn build_batch_with_exporter<R: RuntimeChannel>(
209207
provider_builder = provider_builder.with_config(config);
210208
}
211209
let provider = provider_builder.build();
212-
let logger = provider.versioned_logger(
213-
Cow::Borrowed("opentelemetry-otlp"),
214-
Some(Cow::Borrowed(env!("CARGO_PKG_VERSION"))),
215-
None,
216-
None,
217-
);
210+
let logger = provider
211+
.logger_builder(Cow::Borrowed("opentelemetry-otlp"))
212+
.with_version(Cow::Borrowed(env!("CARGO_PKG_VERSION")))
213+
.build();
218214
let _ = global::set_logger_provider(provider);
219215
logger
220216
}

opentelemetry-otlp/src/span.rs

+10-12
Original file line numberDiff line numberDiff line change
@@ -140,12 +140,11 @@ fn build_simple_with_exporter(
140140
provider_builder = provider_builder.with_config(config);
141141
}
142142
let provider = provider_builder.build();
143-
let tracer = provider.versioned_tracer(
144-
"opentelemetry-otlp",
145-
Some(env!("CARGO_PKG_VERSION")),
146-
Some(SCHEMA_URL),
147-
None,
148-
);
143+
let tracer = provider
144+
.tracer_builder("opentelemetry-otlp")
145+
.with_version(env!("CARGO_PKG_VERSION"))
146+
.with_schema_url(SCHEMA_URL)
147+
.build();
149148
let _ = global::set_tracer_provider(provider);
150149
tracer
151150
}
@@ -166,12 +165,11 @@ fn build_batch_with_exporter<R: RuntimeChannel>(
166165
provider_builder = provider_builder.with_config(config);
167166
}
168167
let provider = provider_builder.build();
169-
let tracer = provider.versioned_tracer(
170-
"opentelemetry-otlp",
171-
Some(env!("CARGO_PKG_VERSION")),
172-
Some(SCHEMA_URL),
173-
None,
174-
);
168+
let tracer = provider
169+
.tracer_builder("opentelemetry-otlp")
170+
.with_version(env!("CARGO_PKG_VERSION"))
171+
.with_schema_url(SCHEMA_URL)
172+
.build();
175173
let _ = global::set_tracer_provider(provider);
176174
tracer
177175
}

opentelemetry-sdk/src/logs/log_emitter.rs

+13-6
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,19 @@ impl opentelemetry::logs::LoggerProvider for LoggerProvider {
4343
name
4444
};
4545

46-
self.library_logger(Arc::new(InstrumentationLibrary::new(
47-
component_name,
48-
version,
49-
schema_url,
50-
attributes,
51-
)))
46+
let mut builder = self.logger_builder(component_name);
47+
48+
if let Some(v) = version {
49+
builder = builder.with_version(v);
50+
}
51+
if let Some(s) = schema_url {
52+
builder = builder.with_schema_url(s);
53+
}
54+
if let Some(a) = attributes {
55+
builder = builder.with_attributes(a);
56+
}
57+
58+
builder.build()
5259
}
5360

5461
fn library_logger(&self, library: Arc<InstrumentationLibrary>) -> Self::Logger {

opentelemetry-sdk/src/logs/mod.rs

+43-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ mod tests {
1616
use super::*;
1717
use crate::testing::logs::InMemoryLogsExporter;
1818
use opentelemetry::logs::{LogRecord, Logger, LoggerProvider as _, Severity};
19-
use opentelemetry::{logs::AnyValue, Key};
19+
use opentelemetry::{logs::AnyValue, Key, KeyValue};
2020

2121
#[test]
2222
fn logging_sdk_test() {
@@ -55,4 +55,46 @@ mod tests {
5555
.expect("Attributes are expected");
5656
assert_eq!(attributes.len(), 2);
5757
}
58+
59+
#[test]
60+
fn logger_attributes() {
61+
let provider = LoggerProvider::builder().build();
62+
let logger = provider
63+
.logger_builder("test_logger")
64+
.with_schema_url("https://opentelemetry.io/schema/1.0.0")
65+
.with_attributes(vec![(KeyValue::new("test_k", "test_v"))])
66+
.build();
67+
let instrumentation_library = logger.instrumentation_library();
68+
let attributes = &instrumentation_library.attributes;
69+
assert_eq!(instrumentation_library.name, "test_logger");
70+
assert_eq!(
71+
instrumentation_library.schema_url,
72+
Some("https://opentelemetry.io/schema/1.0.0".into())
73+
);
74+
assert_eq!(attributes.len(), 1);
75+
assert_eq!(attributes[0].key, "test_k".into());
76+
assert_eq!(attributes[0].value, "test_v".into());
77+
}
78+
79+
#[test]
80+
#[allow(deprecated)]
81+
fn versioned_logger_options() {
82+
let provider = LoggerProvider::builder().build();
83+
let logger = provider.versioned_logger(
84+
"test_logger",
85+
Some("v1.2.3".into()),
86+
Some("https://opentelemetry.io/schema/1.0.0".into()),
87+
Some(vec![(KeyValue::new("test_k", "test_v"))]),
88+
);
89+
let instrumentation_library = logger.instrumentation_library();
90+
let attributes = &instrumentation_library.attributes;
91+
assert_eq!(instrumentation_library.version, Some("v1.2.3".into()));
92+
assert_eq!(
93+
instrumentation_library.schema_url,
94+
Some("https://opentelemetry.io/schema/1.0.0".into())
95+
);
96+
assert_eq!(attributes.len(), 1);
97+
assert_eq!(attributes[0].key, "test_k".into());
98+
assert_eq!(attributes[0].value, "test_v".into());
99+
}
58100
}

opentelemetry-sdk/src/metrics/meter_provider.rs

+13-1
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,19 @@ impl MeterProvider for SdkMeterProvider {
148148
return Meter::new(Arc::new(NoopMeterCore::new()));
149149
}
150150

151-
let scope = Scope::new(name, version, schema_url, attributes);
151+
let mut builder = Scope::builder(name);
152+
153+
if let Some(v) = version {
154+
builder = builder.with_version(v);
155+
}
156+
if let Some(s) = schema_url {
157+
builder = builder.with_schema_url(s);
158+
}
159+
if let Some(a) = attributes {
160+
builder = builder.with_attributes(a);
161+
}
162+
163+
let scope = builder.build();
152164

153165
if let Ok(mut meters) = self.inner.meters.lock() {
154166
let meter = meters

opentelemetry-sdk/src/trace/mod.rs

+37
Original file line numberDiff line numberDiff line change
@@ -327,4 +327,41 @@ mod tests {
327327
);
328328
assert_eq!(span.span_context().trace_state().get("foo"), Some("bar"));
329329
}
330+
331+
#[test]
332+
fn tracer_attributes() {
333+
let provider = TracerProvider::builder().build();
334+
let tracer = provider
335+
.tracer_builder("test_tracer")
336+
.with_attributes(vec![KeyValue::new("test_k", "test_v")])
337+
.build();
338+
let instrumentation_library = tracer.instrumentation_library();
339+
let attributes = &instrumentation_library.attributes;
340+
assert_eq!(attributes.len(), 1);
341+
assert_eq!(attributes[0].key, "test_k".into());
342+
assert_eq!(attributes[0].value, "test_v".into());
343+
}
344+
345+
#[test]
346+
#[allow(deprecated)]
347+
fn versioned_tracer_options() {
348+
let provider = TracerProvider::builder().build();
349+
let tracer = provider.versioned_tracer(
350+
"test_tracer",
351+
Some(String::from("v1.2.3")),
352+
Some(String::from("https://opentelemetry.io/schema/1.0.0")),
353+
Some(vec![(KeyValue::new("test_k", "test_v"))]),
354+
);
355+
let instrumentation_library = tracer.instrumentation_library();
356+
let attributes = &instrumentation_library.attributes;
357+
assert_eq!(instrumentation_library.name, "test_tracer");
358+
assert_eq!(instrumentation_library.version, Some("v1.2.3".into()));
359+
assert_eq!(
360+
instrumentation_library.schema_url,
361+
Some("https://opentelemetry.io/schema/1.0.0".into())
362+
);
363+
assert_eq!(attributes.len(), 1);
364+
assert_eq!(attributes[0].key, "test_k".into());
365+
assert_eq!(attributes[0].value, "test_v".into());
366+
}
330367
}

opentelemetry-sdk/src/trace/provider.rs

+13-6
Original file line numberDiff line numberDiff line change
@@ -136,12 +136,19 @@ impl opentelemetry::trace::TracerProvider for TracerProvider {
136136
name
137137
};
138138

139-
self.library_tracer(Arc::new(InstrumentationLibrary::new(
140-
component_name,
141-
version,
142-
schema_url,
143-
attributes,
144-
)))
139+
let mut builder = self.tracer_builder(component_name);
140+
141+
if let Some(v) = version {
142+
builder = builder.with_version(v);
143+
}
144+
if let Some(s) = schema_url {
145+
builder = builder.with_schema_url(s);
146+
}
147+
if let Some(a) = attributes {
148+
builder = builder.with_attributes(a);
149+
}
150+
151+
builder.build()
145152
}
146153

147154
fn library_tracer(&self, library: Arc<InstrumentationLibrary>) -> Self::Tracer {

opentelemetry-zipkin/src/exporter/mod.rs

+10-14
Original file line numberDiff line numberDiff line change
@@ -151,13 +151,11 @@ impl ZipkinPipelineBuilder {
151151
let mut provider_builder = TracerProvider::builder().with_simple_exporter(exporter);
152152
provider_builder = provider_builder.with_config(config);
153153
let provider = provider_builder.build();
154-
let tracer = opentelemetry::trace::TracerProvider::versioned_tracer(
155-
&provider,
156-
"opentelemetry-zipkin",
157-
Some(env!("CARGO_PKG_VERSION")),
158-
Some(semcov::SCHEMA_URL),
159-
None,
160-
);
154+
let tracer =
155+
opentelemetry::trace::TracerProvider::tracer_builder(&provider, "opentelemetry-zipkin")
156+
.with_version(env!("CARGO_PKG_VERSION"))
157+
.with_schema_url(semcov::SCHEMA_URL)
158+
.build();
161159
let _ = global::set_tracer_provider(provider);
162160
Ok(tracer)
163161
}
@@ -170,13 +168,11 @@ impl ZipkinPipelineBuilder {
170168
let mut provider_builder = TracerProvider::builder().with_batch_exporter(exporter, runtime);
171169
provider_builder = provider_builder.with_config(config);
172170
let provider = provider_builder.build();
173-
let tracer = opentelemetry::trace::TracerProvider::versioned_tracer(
174-
&provider,
175-
"opentelemetry-zipkin",
176-
Some(env!("CARGO_PKG_VERSION")),
177-
Some(semcov::SCHEMA_URL),
178-
None,
179-
);
171+
let tracer =
172+
opentelemetry::trace::TracerProvider::tracer_builder(&provider, "opentelemetry-zipkin")
173+
.with_version(env!("CARGO_PKG_VERSION"))
174+
.with_schema_url(semcov::SCHEMA_URL)
175+
.build();
180176
let _ = global::set_tracer_provider(provider);
181177
Ok(tracer)
182178
}

opentelemetry/CHANGELOG.md

+50
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,56 @@
1111

1212
- Remove `urlencoding` crate dependency. [#1613](https://github.com/open-telemetry/opentelemetry-rust/pull/1613)
1313

14+
### Changed
15+
16+
- Deprecate `versioned_logger()` in favor of `logger_builder()` [1567](https://github.com/open-telemetry/opentelemetry-rust/pull/1567).
17+
18+
Before:
19+
20+
```
21+
let logger = provider.versioned_logger(
22+
"my-logger-name",
23+
Some(env!("CARGO_PKG_VERSION")),
24+
Some("https://opentelemetry.io/schema/1.0.0"),
25+
Some(vec![KeyValue::new("key", "value")]),
26+
);
27+
```
28+
29+
After:
30+
31+
```
32+
let logger = provider
33+
.logger_builder("my-logger-name")
34+
.with_version(env!("CARGO_PKG_VERSION"))
35+
.with_schema_url("https://opentelemetry.io/schema/1.0.0")
36+
.with_attributes(vec![KeyValue::new("key", "value")])
37+
.build();
38+
```
39+
40+
- Deprecate `versioned_tracer()` in favor of `tracer_builder()` [1567](https://github.com/open-telemetry/opentelemetry-rust/pull/1567).
41+
42+
Before:
43+
44+
```
45+
let tracer = provider.versioned_tracer(
46+
"my-tracer-name",
47+
Some(env!("CARGO_PKG_VERSION")),
48+
Some("https://opentelemetry.io/schema/1.0.0"),
49+
Some(vec![KeyValue::new("key", "value")]),
50+
);
51+
```
52+
53+
After:
54+
55+
```
56+
let tracer = provider
57+
.tracer_builder("my-tracer-name")
58+
.with_version(env!("CARGO_PKG_VERSION"))
59+
.with_schema_url("https://opentelemetry.io/schema/1.0.0")
60+
.with_attributes(vec![KeyValue::new("key", "value")])
61+
.build();
62+
```
63+
1464
## v0.22.0
1565

1666
### Added

0 commit comments

Comments
 (0)