| /* 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(); |
| } |
| } |