1extern crate chrono;
2use chrono::Local;
3use log::{LevelFilter, Metadata, Record};
4
5pub struct ConsoleLogger;
6
7static CONSOLE_LOGGER: ConsoleLogger = ConsoleLogger;
8
9impl ConsoleLogger {
10 pub fn new(loglevel: String) {
11 log::set_logger(&CONSOLE_LOGGER).unwrap();
12 match loglevel.to_lowercase().as_str() {
13 "trace" => log::set_max_level(LevelFilter::Trace),
14 "debug" => log::set_max_level(LevelFilter::Debug),
15 "info" => log::set_max_level(LevelFilter::Info),
16 "warn" => log::set_max_level(LevelFilter::Warn),
17 "error" => log::set_max_level(LevelFilter::Error),
18 "off" => log::set_max_level(LevelFilter::Off),
19 _ => {
20 println!("Invalid loglevel. Expected trace, debug, info, warn, error or off. Received {:?}. Setting loglevel to info! anyway.", loglevel)
21 }
22 }
23 }
24}
25
26impl log::Log for ConsoleLogger {
27 fn enabled(&self, _: &Metadata) -> bool {
28 true
29 }
30 fn log(&self, record: &Record) {
31 if self.enabled(record.metadata()) {
32 println!(
33 "{} {} module:{} file:{}:{} {:?}",
34 Local::now().format("%d/%m/%Y:%H:%M:%S"),
35 record.level().to_string(),
36 record.module_path().unwrap_or("Cannot determine module"),
37 record.file().unwrap_or("Cannot determine file"),
38 record.line().unwrap_or(0),
39 record.args()
40 )
41 }
42 }
43
44 fn flush(&self) {}
45}
46