nanolog 0.2.0

A minimal log library only depending on log and std
Documentation
//! # nanolog
//!
//! A minimal log library only depending on[`log`](https://crates.io/crates/log)
//! and `std`.

use std::time::SystemTime;

use log::{LevelFilter, Log};

/// Internal representation of the logger.
struct Logger {
    level_filter: LevelFilter,
}

/// Initializes the logger with a given [`LevelFilter`].
///
/// Panics in the case that this function has already been called before.
pub fn init(level_filter: LevelFilter) {
    log::set_max_level(level_filter);
    log::set_boxed_logger(Box::new(Logger { level_filter })).unwrap();
}

impl Log for Logger {
    fn enabled(&self, metadata: &log::Metadata) -> bool {
        metadata.level() <= self.level_filter
    }

    fn log(&self, record: &log::Record) {
        let timestamp = SystemTime::UNIX_EPOCH.elapsed().unwrap().as_secs();
        let level = record.level().as_str();
        let target = record.target();
        let args = record.args();
        eprintln!("[{timestamp} {level} {target}] {args}");
    }

    fn flush(&self) {}
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn minimal() {
        init(LevelFilter::Trace);
        log::trace!("trace");
        log::debug!("debug");
        log::info!("info");
        log::warn!("warn");
        log::error!("error");
    }
}