scx_loader/
logger.rs

1// SPDX-License-Identifier: GPL-2.0
2//
3// Copyright (c) 2024 Vladislav Nepogodin <vnepogodin@cachyos.org>
4
5// This software may be used and distributed according to the terms of the
6// GNU General Public License version 2.
7
8use std::env;
9
10use colored::Colorize;
11use log::Level;
12use log::Metadata;
13use log::Record;
14
15struct SimpleLogger;
16
17static LOGGER: SimpleLogger = SimpleLogger;
18
19impl log::Log for SimpleLogger {
20    fn enabled(&self, _: &Metadata) -> bool {
21        true
22    }
23
24    fn log(&self, record: &Record) {
25        if self.enabled(record.metadata()) {
26            let level_str = match record.level() {
27                Level::Error => "[ERROR]".red(),
28                Level::Warn => "[WARN]".yellow(),
29                Level::Info => "[INFO]".red(),
30                Level::Debug => "[DEBUG]".white(),
31                Level::Trace => "[TRACE]".black(),
32            };
33            println!("{level_str}: {}", record.args());
34        }
35    }
36
37    fn flush(&self) {
38        // use std::io::Write;
39        // io::stdout().flush().unwrap();
40    }
41}
42
43pub fn init_logger() -> Result<(), log::SetLoggerError> {
44    // set log level
45    let max_log_level = if let Ok(env_log) = env::var("RUST_LOG") {
46        let env_log = env_log.to_lowercase();
47        match env_log.as_str() {
48            "trace" => log::LevelFilter::Trace,
49            "debug" => log::LevelFilter::Debug,
50            "warn" => log::LevelFilter::Warn,
51            "error" => log::LevelFilter::Error,
52            _ => log::LevelFilter::Info,
53        }
54    } else {
55        log::LevelFilter::Info
56    };
57
58    log::set_logger(&LOGGER).map(|()| log::set_max_level(max_log_level))
59}