@@ -111,7 +111,7 @@ pub struct Logger {
111
111
level_filter : Atomic < LevelFilter > ,
112
112
sinks : Sinks ,
113
113
flush_level_filter : Atomic < LevelFilter > ,
114
- error_handler : RwLock < Option < ErrorHandler > > ,
114
+ error_handler : RwLock < ErrorHandler > ,
115
115
periodic_flusher : Mutex < Option < ( Duration , PeriodicWorker ) > > ,
116
116
}
117
117
@@ -148,30 +148,30 @@ impl Debug for Logger {
148
148
impl Logger {
149
149
/// Gets a [`LoggerBuilder`] with default parameters:
150
150
///
151
- /// | Parameter | Default Value |
152
- /// |----------------------|-------------------------|
153
- /// | [name] | `None` |
154
- /// | [sinks] | `[]` |
155
- /// | [level_filter] | `MoreSevereEqual(Info)` |
156
- /// | [flush_level_filter] | `Off` |
157
- /// | [flush_period] | `None` |
158
- /// | [error_handler] | [default error handler ] |
151
+ /// | Parameter | Default Value |
152
+ /// |----------------------|----------------------------- |
153
+ /// | [name] | `None` |
154
+ /// | [sinks] | `[]` |
155
+ /// | [level_filter] | `MoreSevereEqual(Info)` |
156
+ /// | [flush_level_filter] | `Off` |
157
+ /// | [flush_period] | `None` |
158
+ /// | [error_handler] | [`ErrorHandler:: default()` ] |
159
159
///
160
160
/// [name]: LoggerBuilder::name
161
161
/// [sinks]: LoggerBuilder::sink
162
162
/// [level_filter]: LoggerBuilder::level_filter
163
163
/// [flush_level_filter]: LoggerBuilder::flush_level_filter
164
164
/// [flush_period]: Logger::set_flush_period
165
165
/// [error_handler]: LoggerBuilder::error_handler
166
- /// [default error handler ]: error/index.html# default-error-handler
166
+ /// [`ErrorHandler:: default()` ]: crate:: error::ErrorHandler:: default()
167
167
#[ must_use]
168
168
pub fn builder ( ) -> LoggerBuilder {
169
169
LoggerBuilder {
170
170
name : None ,
171
171
level_filter : LevelFilter :: MoreSevereEqual ( Level :: Info ) ,
172
172
sinks : vec ! [ ] ,
173
173
flush_level_filter : LevelFilter :: Off ,
174
- error_handler : None ,
174
+ error_handler : ErrorHandler :: default ( ) ,
175
175
}
176
176
}
177
177
@@ -379,12 +379,12 @@ impl Logger {
379
379
/// ```
380
380
/// use spdlog::prelude::*;
381
381
///
382
- /// spdlog::default_logger().set_error_handler(Some( |err| {
382
+ /// spdlog::default_logger().set_error_handler(|err| {
383
383
/// panic!("An error occurred in the default logger: {}", err)
384
- /// })) ;
384
+ /// });
385
385
/// ```
386
- pub fn set_error_handler ( & self , handler : Option < ErrorHandler > ) {
387
- * self . error_handler . write_expect ( ) = handler;
386
+ pub fn set_error_handler < F : Into < ErrorHandler > > ( & self , handler : F ) {
387
+ * self . error_handler . write_expect ( ) = handler. into ( ) ;
388
388
}
389
389
390
390
/// Forks and configures a separate new logger.
@@ -479,7 +479,7 @@ impl Logger {
479
479
sinks : self . sinks . clone ( ) ,
480
480
flush_level_filter : Atomic :: new ( self . flush_level_filter ( ) ) ,
481
481
periodic_flusher : Mutex :: new ( None ) ,
482
- error_handler : RwLock :: new ( * self . error_handler . read_expect ( ) ) ,
482
+ error_handler : RwLock :: new ( self . error_handler . read_expect ( ) . clone ( ) ) ,
483
483
}
484
484
}
485
485
@@ -506,17 +506,13 @@ impl Logger {
506
506
}
507
507
508
508
fn handle_error ( & self , err : Error ) {
509
- if let Some ( handler) = self . error_handler . read_expect ( ) . as_ref ( ) {
510
- handler ( err)
511
- } else {
512
- crate :: default_error_handler (
513
- format ! (
514
- "Logger ({})" ,
515
- self . name. as_ref( ) . map_or( "*no name*" , String :: as_str)
516
- ) ,
517
- err,
518
- ) ;
519
- }
509
+ self . error_handler . read_expect ( ) . call_internal (
510
+ format ! (
511
+ "Logger ({})" ,
512
+ self . name. as_ref( ) . map_or( "*no name*" , String :: as_str)
513
+ ) ,
514
+ err,
515
+ ) ;
520
516
}
521
517
522
518
#[ must_use]
@@ -550,7 +546,7 @@ pub struct LoggerBuilder {
550
546
level_filter : LevelFilter ,
551
547
sinks : Sinks ,
552
548
flush_level_filter : LevelFilter ,
553
- error_handler : Option < ErrorHandler > ,
549
+ error_handler : ErrorHandler ,
554
550
}
555
551
556
552
impl LoggerBuilder {
@@ -624,8 +620,8 @@ impl LoggerBuilder {
624
620
///
625
621
/// See the documentation of [`Logger::set_error_handler`] for the
626
622
/// description of this parameter.
627
- pub fn error_handler ( & mut self , handler : ErrorHandler ) -> & mut Self {
628
- self . error_handler = Some ( handler) ;
623
+ pub fn error_handler < F : Into < ErrorHandler > > ( & mut self , handler : F ) -> & mut Self {
624
+ self . error_handler = handler. into ( ) ;
629
625
self
630
626
}
631
627
@@ -657,7 +653,7 @@ impl LoggerBuilder {
657
653
level_filter : Atomic :: new ( self . level_filter ) ,
658
654
sinks : self . sinks . clone ( ) ,
659
655
flush_level_filter : Atomic :: new ( self . flush_level_filter ) ,
660
- error_handler : RwLock :: new ( self . error_handler ) ,
656
+ error_handler : RwLock :: new ( self . error_handler . clone ( ) ) ,
661
657
periodic_flusher : Mutex :: new ( None ) ,
662
658
} ;
663
659
0 commit comments