@@ -21,9 +21,9 @@ use time;
2121use atty;
2222use colored:: Colorize ;
2323use env_logger:: filter:: { Builder as FilterBuilder , Filter } ;
24- use log:: { LevelFilter , Log , Metadata , Record } ;
24+ use log:: { Level , LevelFilter , Log , Metadata , Record } ;
2525
26- use crate :: { structured_logger, SLOGGER } ;
26+ use crate :: { email :: EmailAlarm , structured_logger, SLOGGER } ;
2727
2828pub struct Config {
2929 pub instance_id : usize ,
@@ -41,10 +41,11 @@ pub struct Logger {
4141 instance_id : usize ,
4242 filter : Filter ,
4343 stderr_is_tty : bool ,
44+ email_alarm : Option < EmailAlarm > ,
4445}
4546
4647impl Logger {
47- pub fn new ( config : & Config ) -> Self {
48+ pub fn new ( config : & Config , email_alarm : Option < EmailAlarm > ) -> Self {
4849 let mut builder = FilterBuilder :: new ( ) ;
4950 builder. filter ( None , LevelFilter :: Info ) ;
5051
@@ -58,6 +59,7 @@ impl Logger {
5859 instance_id : config. instance_id ,
5960 filter : builder. build ( ) ,
6061 stderr_is_tty,
62+ email_alarm,
6163 }
6264 }
6365
@@ -103,8 +105,14 @@ impl Log for Logger {
103105 target : log_target. to_string ( ) ,
104106 message : log_message. to_string ( ) ,
105107 timestamp,
106- thread_name,
108+ thread_name : thread_name . clone ( ) ,
107109 } ) ;
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+ }
108116 }
109117 }
110118
0 commit comments