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
use chrono::Local;
pub use log::Level::{Debug, Info as Print};
pub use log::{debug as debugln, info as println, Level};
use log::{Log, Metadata, Record};
pub const LNONE: u8 = 0b0000_0000;
pub const LTIME: u8 = 0b0000_0001;
pub const LPATH: u8 = 0b0000_0010;
struct Rog {
lvl: Level,
fmt: u8,
}
impl Log for Rog {
fn enabled(&self, metadata: &Metadata) -> bool {
metadata.level() <= self.lvl
}
fn log(&self, record: &Record) {
if self.enabled(record.metadata()) {
let mut prefix = String::new();
if self.fmt & LTIME != 0 {
prefix.push_str(format!("{}", Local::now().format("%Y-%m-%d %H:%M:%S")).as_str());
prefix.push_str(" ");
}
if self.fmt & LPATH != 0 {
prefix.push_str(&record.module_path().unwrap_or_default());
prefix.push_str(" ");
}
std::println!("{}{}", prefix, record.args());
}
}
fn flush(&self) {}
}
pub fn init(lvl: Level, fmt: u8) {
let rog = Rog { lvl, fmt };
let _ = log::set_boxed_logger(Box::new(rog));
log::set_max_level(lvl.to_level_filter());
}