1use std::time::SystemTime;
7
8use log::{LevelFilter, Log};
9
10struct Logger {
12 level_filter: LevelFilter,
13}
14
15pub fn init(level_filter: LevelFilter) {
19 log::set_max_level(level_filter);
20 log::set_boxed_logger(Box::new(Logger { level_filter })).unwrap();
21}
22
23impl Log for Logger {
24 fn enabled(&self, metadata: &log::Metadata) -> bool {
25 metadata.level() <= self.level_filter
26 }
27
28 fn log(&self, record: &log::Record) {
29 let timestamp = SystemTime::UNIX_EPOCH.elapsed().unwrap().as_secs();
30 let level = record.level().as_str();
31 let target = record.target();
32 let args = record.args();
33 eprintln!("[{timestamp} {level} {target}] {args}");
34 }
35
36 fn flush(&self) {}
37}
38
39#[cfg(test)]
40mod tests {
41 use super::*;
42
43 #[test]
44 fn minimal() {
45 init(LevelFilter::Trace);
46 log::trace!("trace");
47 log::debug!("debug");
48 log::info!("info");
49 log::warn!("warn");
50 log::error!("error");
51 }
52}