diff --git a/src/context.rs b/src/context.rs index dc893776b..a9f8d5d9f 100644 --- a/src/context.rs +++ b/src/context.rs @@ -15,6 +15,7 @@ use crate::imap::*; use crate::job::*; use crate::job_thread::JobThread; use crate::key::*; +use crate::log; use crate::login_param::LoginParam; use crate::lot::Lot; use crate::message::{self, Message, MsgId}; @@ -62,6 +63,7 @@ pub struct Context { /// Mutex to avoid generating the key for the user more than once. pub generating_key_mutex: Mutex<()>, pub translated_stockstrings: RwLock>, + pub logger: RwLock, } #[derive(Debug, PartialEq, Eq)] @@ -212,6 +214,7 @@ impl Context { perform_inbox_jobs_needed: Arc::new(RwLock::new(false)), generating_key_mutex: Mutex::new(()), translated_stockstrings: RwLock::new(HashMap::new()), + logger: RwLock::new(log::Logger::new(logdir)?), }; ensure!( diff --git a/src/lib.rs b/src/lib.rs index fd61d2821..a886cec41 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -22,7 +22,7 @@ extern crate jetscii; extern crate debug_stub_derive; #[macro_use] -mod log; +pub mod log; #[macro_use] pub mod error; diff --git a/src/log.rs b/src/log.rs index ba1dc10b1..a65fd70a7 100644 --- a/src/log.rs +++ b/src/log.rs @@ -153,6 +153,9 @@ macro_rules! info { }; ($ctx:expr, $msg:expr, $($args:expr),* $(,)?) => {{ let formatted = format!($msg, $($args),*); + if let Ok(mut logger) = $ctx.logger.write() { + logger.log($crate::log::LogLevel::Info, callsite!(), &formatted).ok(); + } emit_event!($ctx, $crate::Event::Info(formatted)); }}; } @@ -164,6 +167,9 @@ macro_rules! warn { }; ($ctx:expr, $msg:expr, $($args:expr),* $(,)?) => {{ let formatted = format!($msg, $($args),*); + if let Ok(mut logger) = $ctx.logger.write() { + logger.log($crate::log::LogLevel::Warning, callsite!(), &formatted).ok(); + } emit_event!($ctx, $crate::Event::Warning(formatted)); }}; } @@ -175,6 +181,9 @@ macro_rules! error { }; ($ctx:expr, $msg:expr, $($args:expr),* $(,)?) => {{ let formatted = format!($msg, $($args),*); + if let Ok(mut logger) = $ctx.logger.write() { + logger.log($crate::log::LogLevel::Error, callsite!(), &formatted).ok(); + } emit_event!($ctx, $crate::Event::Error(formatted)); }}; }