summaryrefslogtreecommitdiff
path: root/src/logging.rs
blob: 7b113b6a3d2d3b770b461e4703144567059afb31 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
use std::io::Write;

use env_logger::WriteStyle;
use log::{Level, LevelFilter};
use owo_colors::{OwoColorize, Style};

pub fn setup(verbose: u8, color: bool) {
    let level_filter = match verbose {
        0 => LevelFilter::Warn,
        1 => LevelFilter::Info,
        2 => LevelFilter::Debug,
        _ => LevelFilter::Trace,
    };

    let style = if color {
        WriteStyle::Always
    } else {
        WriteStyle::Never
    };

    env_logger::Builder::new()
        .filter_level(level_filter)
        .write_style(style)
        .parse_env("BCACHEFS_LOG")
        .format(move |buf, record| {
            let style = if style == WriteStyle::Never {
                Style::new()
            } else {
                match record.level() {
                    Level::Trace => Style::new().cyan(),
                    Level::Debug => Style::new().blue(),
                    Level::Info => Style::new().green(),
                    Level::Warn => Style::new().yellow(),
                    Level::Error => Style::new().red().bold(),
                }
            };

            writeln!(
                buf,
                "[{:<5} {}:{}] {}",
                record.level().style(style),
                record.file().unwrap(),
                record.line().unwrap(),
                record.args()
            )
        })
        .init();
}