@@ -13,10 +13,7 @@ use opentelemetry::{
1313#[ cfg( feature = "logs_level_enabled" ) ]
1414use 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 . to_owned ( ) )
5956 }
6057}
6158
6259impl 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
180172pub struct Logger {
181173 instrumentation_lib : Arc < InstrumentationLibrary > ,
182- provider : Weak < LoggerProviderInner > ,
174+ provider : LoggerProvider ,
183175}
184176
185177impl 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 {
207199impl 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