-
Notifications
You must be signed in to change notification settings - Fork 218
/
logging.rs
60 lines (47 loc) · 1.54 KB
/
logging.rs
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
49
50
51
52
53
54
55
56
57
58
59
60
use std::io::Write;
use env_logger::fmt;
use log::*;
pub fn enable_logging() {
let mut builder = env_logger::Builder::from_default_env();
// NOTE: can infer types here, but I find them a useful reminder.
let _result = builder
.format(move |buf: &mut fmt::Formatter, record: &log::Record| {
let date = chrono::Local::now();
let level_str = level_to_emoji(record.level());
let mut style = buf.style();
let hours_minutes = date.format("%H:%M").to_string();
let seconds_millis = date.format("%S%.3f").to_string();
let fmt_seconds = style.set_bold(true).value(seconds_millis);
let truncated_module_path = &record.module_path()?[5..];
writeln!(
buf,
"{:<2} [{}:{}] - {:<12} - {}",
level_str,
hours_minutes,
fmt_seconds,
truncated_module_path,
record.args()
)
})
.try_init();
}
// damn, looks like it's harder than I thought it would be to change the datetime format!
fn level_to_emoji(level: log::Level) -> &'static str {
use Level::*;
match level {
Error => "❌",
Warn => "☢️ ",
Info => "📝",
Debug => "🐛", // NOTE: there's emoji here!
Trace => "🏹",
}
}
#[test]
fn start_the_logs() {
enable_logging();
error!("error message");
warn!("warn message");
info!("info message");
debug!("debug message");
trace!("trace message");
}