rusty-blockparser 0.8.1

Blockchain Parser for most common Cryptocurrencies based on Bitcoin
use std::io::{stderr, stdout, Write};

use log::{self, Level, LevelFilter, Metadata, Record, SetLoggerError};
use time::OffsetDateTime;

pub struct SimpleLogger {
    level_filter: LevelFilter,
}

impl SimpleLogger {
    pub fn init(level_filter: LevelFilter) -> Result<(), SetLoggerError> {
        let logger = SimpleLogger { level_filter };
        log::set_boxed_logger(Box::new(logger))?;
        log::set_max_level(level_filter);
        Ok(())
    }

    fn create_log_line(&self, record: &Record) -> String {
        format!(
            "[{}] {} - {}: {}\n",
            OffsetDateTime::now_local().format("%T"),
            record.level().to_string(),
            record.target(),
            record.args()
        )
    }
}

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

    fn log(&self, record: &Record) {
        if self.enabled(record.metadata()) {
            let line = self.create_log_line(record);
            match record.level() {
                Level::Error => {
                    stderr().write_all(line.as_bytes()).unwrap();
                }
                _ => {
                    stdout().write_all(line.as_bytes()).unwrap();
                }
            }
        }
    }

    fn flush(&self) {}
}