aboutsummaryrefslogtreecommitdiff
path: root/src/main.rs
blob: d1d8351c0683fa1724dfd6230d973c70fa07d91c (plain) (blame)
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()
}