@@ -175,6 +175,23 @@ impl Builder {
175
175
cfg
176
176
}
177
177
178
+ /// Builds the logger without registering it in the [`log`] crate.
179
+ ///
180
+ /// Unlike [`Builder::init`] and [`Builder::try_init`] this does not register
181
+ /// the logger into the [`log`] system, allowing it to be combined with
182
+ /// other logging crates.
183
+ pub fn build ( self ) -> impl log:: Log {
184
+ Logger {
185
+ filter : self . filter ,
186
+ default_writer : self . default_writer ,
187
+ writers : self
188
+ . writers
189
+ . into_iter ( )
190
+ . map ( |( t, w) | ( InnerTarget :: from ( t) , w) )
191
+ . collect ( ) ,
192
+ }
193
+ }
194
+
178
195
/// Initialize the logger for [`log`] crate.
179
196
///
180
197
/// See the [crate level documentation] for more.
@@ -198,17 +215,11 @@ impl Builder {
198
215
/// [`init`]: fn.init.html
199
216
/// [crate level documentation]: index.html
200
217
pub fn try_init ( self ) -> Result < ( ) , SetLoggerError > {
201
- let logger = Box :: new ( Logger {
202
- filter : self . filter ,
203
- default_writer : self . default_writer ,
204
- writers : self
205
- . writers
206
- . into_iter ( )
207
- . map ( |( t, w) | ( InnerTarget :: from ( t) , w) )
208
- . collect ( ) ,
209
- } ) ;
218
+ let filter = self . filter ;
219
+ let logger = Box :: new ( self . build ( ) ) ;
220
+
210
221
log:: set_boxed_logger ( logger) ?;
211
- log:: set_max_level ( self . filter ) ;
222
+ log:: set_max_level ( filter) ;
212
223
213
224
#[ cfg( feature = "log-panic" ) ]
214
225
std:: panic:: set_hook ( Box :: new ( log_panic) ) ;
0 commit comments