@@ -22,17 +22,24 @@ struct Logger;
22
22
static LOGGER : Logger = Logger ;
23
23
static INITIALIZED : AtomicBool = AtomicBool :: new ( false ) ;
24
24
25
- pub ( crate ) fn set_log_level ( level : LogLevel ) {
25
+ pub ( crate ) fn set_log_level ( level : LogLevel ) -> Result < ( ) , Box < dyn std :: error :: Error > > {
26
26
if !INITIALIZED . load ( Ordering :: Relaxed ) {
27
- log:: set_logger ( & LOGGER ) . unwrap ( ) ;
27
+ log:: set_logger ( & LOGGER )
28
+ . map_err ( |e| format ! ( "Failed to set logger: {}" , e) ) ?;
29
+
28
30
panic:: set_hook ( Box :: new ( |panic_info| {
29
- hostcalls:: log ( LogLevel :: Critical , & panic_info. to_string ( ) ) . unwrap ( ) ;
31
+ if let Err ( e) = hostcalls:: log ( LogLevel :: Critical , & panic_info. to_string ( ) ) {
32
+ eprintln ! ( "Failed to log panic info: {}" , e) ;
33
+ }
30
34
} ) ) ;
35
+
31
36
INITIALIZED . store ( true , Ordering :: Relaxed ) ;
32
37
}
33
38
LOGGER . set_log_level ( level) ;
39
+ Ok ( ( ) )
34
40
}
35
41
42
+
36
43
impl Logger {
37
44
pub fn set_log_level ( & self , level : LogLevel ) {
38
45
let filter = match level {
@@ -64,8 +71,12 @@ impl log::Log for Logger {
64
71
log:: Level :: Error => LogLevel :: Error ,
65
72
} ;
66
73
let message = record. args ( ) . to_string ( ) ;
67
- hostcalls:: log ( level, & message) . unwrap ( ) ;
74
+ if let Err ( e) = hostcalls:: log ( level, & message) {
75
+ // 如果日志记录失败,我们可以尝试打印到标准错误
76
+ eprintln ! ( "Failed to log message: {}. Error: {}" , message, e) ;
77
+ }
68
78
}
69
79
80
+
70
81
fn flush ( & self ) { }
71
82
}
0 commit comments