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
61
62
63
|
#[macro_use] extern crate log;
#[macro_use] extern crate wisp;
extern crate chrono;
extern crate fern;
extern crate kankyo;
use fern::colors::{Color, ColoredLevelConfig};
use wisp::WispClient;
fn main() {
kankyo::load().expect("Failed to load .env file.");
fern_setup().expect("Failed to apply Fern settings.");
let mut client = WispClient::new();
check_error!(client.start());
}
fn fern_setup() -> Result<(), log::SetLoggerError> {
let colours = ColoredLevelConfig::new()
.trace(Color::Magenta)
.debug(Color::Cyan)
.info(Color::Green)
.warn(Color::Yellow)
.error(Color::Red);
let term_out = fern::Dispatch::new()
.format(move |out, message, record| {
out.finish(format_args!(
"{time} {level:level_width$}{target:target_width$}> {msg}",
time = chrono::Utc::now().format("%F %T"),
level = colours.color(record.level()),
target = format!("{}:{}", record.target(), record.line().unwrap_or(0)),
msg = message,
level_width = 8,
target_width = 60
))
})
.chain(std::io::stdout())
.into_shared();
let file_out = fern::Dispatch::new()
.format(|out, message, record| {
out.finish(format_args!(
"{time} {level:level_width$}{target:target_width$}> {msg}",
time = chrono::Utc::now().format("%F %T"),
level = record.level(),
target = format!("{}:{}", record.target(), record.line().unwrap_or(0)),
msg = message,
level_width = 8,
target_width = 60
))
})
.chain(fern::log_file("output.log").expect("Failed to load log file."))
.into_shared();
fern::Dispatch::new()
.level(log::LevelFilter::Info)
.level_for("serenity", log::LevelFilter::Debug)
.level_for("wisp", log::LevelFilter::Debug)
.chain(term_out)
.chain(file_out)
.apply()
}
|