diff options
Diffstat (limited to 'src/logging.rs')
-rw-r--r-- | src/logging.rs | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/src/logging.rs b/src/logging.rs new file mode 100644 index 0000000..0b49ce2 --- /dev/null +++ b/src/logging.rs @@ -0,0 +1,105 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +use std::io; +use std::io::Write; + +use log::*; + +pub struct TraceLogger; +pub struct WarnLogger; +pub struct InfoLogger; +pub struct ErrorLogger; + +impl TraceLogger { + pub fn init() -> Result<(), SetLoggerError> { + log::set_logger(&TraceLogger)?; + log::set_max_level(LevelFilter::Trace); + Ok(()) + } +} +impl log::Log for TraceLogger { + fn enabled(&self, metadata: &Metadata) -> bool { + metadata.level() <= Level::Trace + } + + fn log(&self, record: &Record) { + if self.enabled(record.metadata()) { + eprintln!("{}: {}", record.level(), record.args()); + } + } + + fn flush(&self) { + io::stderr().flush().unwrap(); + } +} + +impl WarnLogger { + pub fn init() -> Result<(), SetLoggerError> { + log::set_logger(&WarnLogger)?; + log::set_max_level(LevelFilter::Warn); + Ok(()) + } +} +impl log::Log for WarnLogger { + fn enabled(&self, metadata: &Metadata) -> bool { + metadata.level() <= Level::Warn + } + + fn log(&self, record: &Record) { + if self.enabled(record.metadata()) { + eprintln!("{}: {}", record.level(), record.args()); + } + } + + fn flush(&self) { + io::stderr().flush().unwrap(); + } +} + +impl ErrorLogger { + pub fn init() -> Result<(), SetLoggerError> { + log::set_logger(&ErrorLogger)?; + log::set_max_level(LevelFilter::Error); + Ok(()) + } +} +impl log::Log for ErrorLogger { + fn enabled(&self, metadata: &Metadata) -> bool { + metadata.level() <= Level::Error + } + + fn log(&self, record: &Record) { + if self.enabled(record.metadata()) { + eprintln!("{}: {}", record.level(), record.args()); + } + } + + fn flush(&self) { + io::stderr().flush().unwrap(); + } +} + +impl InfoLogger { + pub fn init() -> Result<(), SetLoggerError> { + log::set_logger(&InfoLogger)?; + log::set_max_level(LevelFilter::Info); + Ok(()) + } +} +impl log::Log for InfoLogger { + fn enabled(&self, metadata: &Metadata) -> bool { + metadata.level() <= Level::Info + } + + fn log(&self, record: &Record) { + if self.enabled(record.metadata()) { + eprintln!("{}: {}", record.level(), record.args()); + } + } + + fn flush(&self) { + io::stderr().flush().unwrap(); + } +} |