clg/
log_impl.rs

1use log::{Level, Metadata, Record};
2
3use crate::{get_offset_time, ConsoleLogger};
4
5impl log::Log for ConsoleLogger {
6  fn enabled(&self, metadata: &Metadata) -> bool {
7    metadata.level() <= self.0
8  }
9
10  fn log(&self, r: &Record) {
11    if !self.enabled(r.metadata()) {
12      return;
13    }
14
15    let lv = r.level();
16    let module = r.module_path().unwrap_or("");
17    let now = get_offset_time();
18    let offset_str = if now.offset().is_utc() { "Z" } else { "" };
19
20    let org_line = r.line().unwrap_or(0);
21    let line = {
22      use owo_colors::OwoColorize;
23      org_line.blue()
24    };
25
26    let colored_lv = {
27      use owo_colors::OwoColorize;
28      use Level::*;
29      let sty = owo_colors::Style::new();
30      match lv {
31        Error => lv.style(sty.red().bold()),
32        Warn => lv.style(sty.yellow().bold()),
33        Info => lv.style(sty.green()),
34        Debug => lv.style(sty.blue()),
35        _ => lv.style(sty.cyan()),
36      }
37    };
38
39    let fmt_str = format!(
40      "{hour:02}:{min:02}:{sec:02}.{ms:03}{offset_str} [{colored_lv}] {module}:{line} {args}",
41      hour = now.hour(),
42      min = now.minute(),
43      sec = now.second(),
44      ms = now.millisecond(),
45      args = r.args()
46    );
47    Self::output(lv as _, fmt_str.into());
48  }
49
50  fn flush(&self) {}
51}