#![deny(missing_docs)]
#[macro_use] extern crate log;
#[cfg(feature = "term")]
extern crate term;
extern crate time;
mod config;
mod loggers;
pub use self::config::Config;
pub use self::loggers::{SimpleLogger, WriteLogger, CombinedLogger};
#[cfg(feature = "term")]
pub use self::loggers::TermLogger;
pub use log::LogLevelFilter;
use log::Log;
pub trait SharedLogger: Log {
fn level(&self) -> LogLevelFilter;
fn config(&self) -> Option<&Config>;
fn as_log(self: Box<Self>) -> Box<Log>;
}
#[cfg(test)]
mod tests {
use std::io::Read;
use std::fs::File;
use super::*;
#[test]
fn test() {
CombinedLogger::init(
vec![
SimpleLogger::new(LogLevelFilter::Error, Config::default()),
TermLogger::new(LogLevelFilter::Error, Config::default()).unwrap(),
WriteLogger::new(LogLevelFilter::Error, Config::default(), File::create("error.log").unwrap()),
SimpleLogger::new(LogLevelFilter::Warn, Config::default()),
TermLogger::new(LogLevelFilter::Warn, Config::default()).unwrap(),
WriteLogger::new(LogLevelFilter::Warn, Config::default(), File::create("warn.log").unwrap()),
SimpleLogger::new(LogLevelFilter::Info, Config::default()),
TermLogger::new(LogLevelFilter::Info, Config::default()).unwrap(),
WriteLogger::new(LogLevelFilter::Info, Config::default(), File::create("info.log").unwrap()),
SimpleLogger::new(LogLevelFilter::Debug, Config::default()),
TermLogger::new(LogLevelFilter::Debug, Config::default()).unwrap(),
WriteLogger::new(LogLevelFilter::Debug, Config::default(), File::create("debug.log").unwrap()),
SimpleLogger::new(LogLevelFilter::Trace, Config::default()),
TermLogger::new(LogLevelFilter::Trace, Config::default()).unwrap(),
WriteLogger::new(LogLevelFilter::Trace, Config::default(), File::create("trace.log").unwrap()),
]
).unwrap();
error!("Test Error");
warn!("Test Warning");
info!("Test Information");
debug!("Test Debug");
trace!("Test Trace");
let mut error = String::new();
File::open("error.log").unwrap().read_to_string(&mut error).unwrap();
let mut warn = String::new();
File::open("warn.log").unwrap().read_to_string(&mut warn).unwrap();
let mut info = String::new();
File::open("info.log").unwrap().read_to_string(&mut info).unwrap();
let mut debug = String::new();
File::open("debug.log").unwrap().read_to_string(&mut debug).unwrap();
let mut trace = String::new();
File::open("trace.log").unwrap().read_to_string(&mut trace).unwrap();
assert!(error.contains("Test Error"));
assert!(!error.contains("Test Warning"));
assert!(warn.contains("Test Error"));
assert!(warn.contains("Test Warning"));
assert!(!warn.contains("Test Information"));
assert!(info.contains("Test Error"));
assert!(info.contains("Test Warning"));
assert!(info.contains("Test Information"));
assert!(!info.contains("Test Debug"));
assert!(debug.contains("Test Error"));
assert!(debug.contains("Test Warning"));
assert!(debug.contains("Test Information"));
assert!(debug.contains("Test Debug"));
assert!(!debug.contains("Test Trace"));
assert!(trace.contains("Test Error"));
assert!(trace.contains("Test Warning"));
assert!(trace.contains("Test Information"));
assert!(trace.contains("Test Debug"));
assert!(trace.contains("Test Trace"));
}
}