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
pub mod command;
pub mod config;
pub mod error;
pub mod state;
use colored::*;
use log::*;
pub const SOCKET_PATH: &str = "/var/tmp/mumd";
pub const DEFAULT_PORT: u16 = 64738;
pub fn setup_logger<T: Into<fern::Output>>(target: T, color: bool) {
fern::Dispatch::new()
.format(move |out, message, record| {
let message = message.to_string();
out.finish(format_args!(
"{} {}:{}{}{}",
if color {
match record.level() {
Level::Error => "ERROR".red(),
Level::Warn => "WARN ".yellow(),
Level::Info => "INFO ".normal(),
Level::Debug => "DEBUG".green(),
Level::Trace => "TRACE".normal(),
}
} else {
match record.level() {
Level::Error => "ERROR",
Level::Warn => "WARN ",
Level::Info => "INFO ",
Level::Debug => "DEBUG",
Level::Trace => "TRACE",
}
.normal()
},
record.file().unwrap(),
record.line().unwrap(),
if message.chars().any(|e| e == '\n') {
"\n"
} else {
" "
},
message
))
})
.level(log::LevelFilter::Debug)
.chain(target.into())
.apply()
.unwrap();
}