Skip to content

Commit 6221d8d

Browse files
committed
Change to owned TracerProvider
The interface to an item shouldn't take an inner value since it's considered inner, this also allows for further optimizations in the future as it hides the complexity from the user. Rational: This removes exposing the inner which doesn't need to be provided outside of the class. The advantage of this approach is that it's a cleaner implementation. This also removes a weak reference upgrade from the hotpath since we need to have a strong reference in order to access the information. Relates open-telemetry#1209
1 parent dd4c13b commit 6221d8d

File tree

1 file changed

+14
-27
lines changed

1 file changed

+14
-27
lines changed

opentelemetry-sdk/src/logs/log_emitter.rs

+14-27
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,7 @@ use opentelemetry::{
1313
#[cfg(feature = "logs_level_enabled")]
1414
use opentelemetry::logs::Severity;
1515

16-
use std::{
17-
borrow::Cow,
18-
sync::{Arc, Weak},
19-
};
16+
use std::{borrow::Cow, sync::Arc};
2017

2118
#[derive(Debug, Clone)]
2219
/// Creator for `Logger` instances.
@@ -55,16 +52,11 @@ impl opentelemetry::logs::LoggerProvider for LoggerProvider {
5552
}
5653

5754
fn library_logger(&self, library: Arc<InstrumentationLibrary>) -> Self::Logger {
58-
Logger::new(library, Arc::downgrade(&self.inner))
55+
Logger::new(library, self.clone())
5956
}
6057
}
6158

6259
impl LoggerProvider {
63-
/// Build a new logger provider.
64-
pub(crate) fn new(inner: Arc<LoggerProviderInner>) -> Self {
65-
LoggerProvider { inner }
66-
}
67-
6860
/// Create a new `LoggerProvider` builder.
6961
pub fn builder() -> Builder {
7062
Builder::default()
@@ -91,7 +83,7 @@ impl LoggerProvider {
9183
/// Shuts down this `LoggerProvider`, panicking on failure.
9284
pub fn shutdown(&mut self) -> Vec<LogResult<()>> {
9385
self.try_shutdown()
94-
.expect("canont shutdown LoggerProvider when child Loggers are still active")
86+
.expect("cannot shutdown LoggerProvider when child Loggers are still active")
9587
}
9688

9789
/// Attempts to shutdown this `LoggerProvider`, succeeding only when
@@ -108,7 +100,7 @@ impl LoggerProvider {
108100
}
109101

110102
#[derive(Debug)]
111-
pub(crate) struct LoggerProviderInner {
103+
struct LoggerProviderInner {
112104
processors: Vec<Box<dyn LogProcessor>>,
113105
config: Config,
114106
}
@@ -179,13 +171,13 @@ impl Builder {
179171
/// [`LogRecord`]: opentelemetry::logs::LogRecord
180172
pub struct Logger {
181173
instrumentation_lib: Arc<InstrumentationLibrary>,
182-
provider: Weak<LoggerProviderInner>,
174+
provider: LoggerProvider,
183175
}
184176

185177
impl Logger {
186178
pub(crate) fn new(
187179
instrumentation_lib: Arc<InstrumentationLibrary>,
188-
provider: Weak<LoggerProviderInner>,
180+
provider: LoggerProvider,
189181
) -> Self {
190182
Logger {
191183
instrumentation_lib,
@@ -194,8 +186,8 @@ impl Logger {
194186
}
195187

196188
/// LoggerProvider associated with this logger.
197-
pub fn provider(&self) -> Option<LoggerProvider> {
198-
self.provider.upgrade().map(LoggerProvider::new)
189+
pub fn provider(&self) -> &LoggerProvider {
190+
&self.provider
199191
}
200192

201193
/// Instrumentation library information of this logger.
@@ -207,16 +199,14 @@ impl Logger {
207199
impl opentelemetry::logs::Logger for Logger {
208200
/// Emit a `LogRecord`.
209201
fn emit(&self, record: LogRecord) {
210-
let provider = match self.provider() {
211-
Some(provider) => provider,
212-
None => return,
213-
};
202+
let provider = self.provider();
203+
let config = provider.config();
204+
let processors = provider.log_processors();
214205
let trace_context = Context::map_current(|cx| {
215206
cx.has_active_span()
216207
.then(|| TraceContext::from(cx.span().span_context()))
217208
});
218-
let config = provider.config();
219-
for processor in provider.log_processors() {
209+
for p in processors {
220210
let mut record = record.clone();
221211
if let Some(ref trace_context) = trace_context {
222212
record.trace_context = Some(trace_context.clone())
@@ -226,16 +216,13 @@ impl opentelemetry::logs::Logger for Logger {
226216
resource: config.resource.clone(),
227217
instrumentation: self.instrumentation_library().clone(),
228218
};
229-
processor.emit(data);
219+
p.emit(data);
230220
}
231221
}
232222

233223
#[cfg(feature = "logs_level_enabled")]
234224
fn event_enabled(&self, level: Severity, target: &str) -> bool {
235-
let provider = match self.provider() {
236-
Some(provider) => provider,
237-
None => return false,
238-
};
225+
let provider = self.provider();
239226

240227
let mut enabled = false;
241228
for processor in provider.log_processors() {

0 commit comments

Comments
 (0)