diff options
author | Ben Bridle <ben@derelict.engineering> | 2025-02-03 09:34:56 +1300 |
---|---|---|
committer | Ben Bridle <ben@derelict.engineering> | 2025-02-03 09:34:56 +1300 |
commit | 4db8a3c200345d67ef178308a11d253a112d6304 (patch) | |
tree | 28ed058ab1efe645a242640dd2620960779dd150 | |
parent | 9d9fe9f30e46bc3b723d6a35434c3202c7f0f163 (diff) | |
download | log-4db8a3c200345d67ef178308a11d253a112d6304.zip |
Implement a fatal log level
The error log level now reports recoverable errors, with the fatal log
level being reserved for unrecoverable errors where the program should
immediately terminate.
-rw-r--r-- | src/lib.rs | 16 | ||||
-rw-r--r-- | src/log_level.rs | 12 |
2 files changed, 27 insertions, 1 deletions
@@ -70,6 +70,22 @@ pub fn get_log_level() -> LogLevel { $crate::NORMAL, ); } + }}; +} + +#[macro_export] macro_rules! fatal { + ($($tokens:tt)*) => {{ + if *$crate::LOG_LEVEL.lock().unwrap() <= { $crate::LogLevel::Fatal } { + eprint!("{}{}[FATAL]{}: ", + $crate::BOLD, + $crate::RED, + $crate::WHITE, + ); + eprint!($($tokens)*); + eprintln!("{}", + $crate::NORMAL, + ); + } std::process::exit(1); }}; } diff --git a/src/log_level.rs b/src/log_level.rs index 6c84cb0..9293efc 100644 --- a/src/log_level.rs +++ b/src/log_level.rs @@ -7,8 +7,10 @@ pub enum LogLevel { Info, /// Report recoverable issues. Warn, - /// Report unrecoverable errors and quit. + /// Report recoverable process errors. Error, + /// Report unrecoverable application errors and quit. + Fatal, } impl PartialOrd for LogLevel { @@ -24,14 +26,22 @@ impl Ord for LogLevel { (Info , Info ) => Ordering::Equal, (Info , Warn ) => Ordering::Less, (Info , Error) => Ordering::Less, + (Info , Fatal) => Ordering::Less, (Warn , Info ) => Ordering::Greater, (Warn , Warn ) => Ordering::Equal, (Warn , Error) => Ordering::Less, + (Warn , Fatal) => Ordering::Less, (Error , Info ) => Ordering::Greater, (Error , Warn ) => Ordering::Greater, (Error , Error) => Ordering::Equal, + (Error , Fatal) => Ordering::Less, + + (Fatal , Info ) => Ordering::Greater, + (Fatal , Warn ) => Ordering::Greater, + (Fatal , Error) => Ordering::Greater, + (Fatal , Fatal) => Ordering::Equal, } } } |