@@ -21,9 +21,9 @@ use time;
21
21
use atty;
22
22
use colored:: Colorize ;
23
23
use env_logger:: filter:: { Builder as FilterBuilder , Filter } ;
24
- use log:: { LevelFilter , Log , Metadata , Record } ;
24
+ use log:: { Level , LevelFilter , Log , Metadata , Record } ;
25
25
26
- use crate :: { structured_logger, SLOGGER } ;
26
+ use crate :: { email :: EmailAlarm , structured_logger, SLOGGER } ;
27
27
28
28
pub struct Config {
29
29
pub instance_id : usize ,
@@ -41,10 +41,11 @@ pub struct Logger {
41
41
instance_id : usize ,
42
42
filter : Filter ,
43
43
stderr_is_tty : bool ,
44
+ email_alarm : Option < EmailAlarm > ,
44
45
}
45
46
46
47
impl Logger {
47
- pub fn new ( config : & Config ) -> Self {
48
+ pub fn new ( config : & Config , email_alarm : Option < EmailAlarm > ) -> Self {
48
49
let mut builder = FilterBuilder :: new ( ) ;
49
50
builder. filter ( None , LevelFilter :: Info ) ;
50
51
@@ -58,6 +59,7 @@ impl Logger {
58
59
instance_id : config. instance_id ,
59
60
filter : builder. build ( ) ,
60
61
stderr_is_tty,
62
+ email_alarm,
61
63
}
62
64
}
63
65
@@ -103,8 +105,14 @@ impl Log for Logger {
103
105
target : log_target. to_string ( ) ,
104
106
message : log_message. to_string ( ) ,
105
107
timestamp,
106
- thread_name,
108
+ thread_name : thread_name . clone ( ) ,
107
109
} ) ;
110
+
111
+ if log_level == Level :: Error {
112
+ if let Some ( email_alarm) = & self . email_alarm {
113
+ email_alarm. send ( & format ! ( "{} {} {}" , thread_name, log_target, log_message) )
114
+ }
115
+ }
108
116
}
109
117
}
110
118
0 commit comments