north_common/utils/
logger_utils.rs

1use yansi::Paint;
2
3use log::{Level, LevelFilter, Metadata, Record};
4use log4rs::append::console::ConsoleAppender;
5use log4rs::append::file::FileAppender;
6use log4rs::config::{Appender, Logger as LoggerRs, Root};
7use log4rs::encode::pattern::PatternEncoder;
8use log4rs::Config;
9
10pub fn print_format(name: &str, value: &str) {
11    println!(
12        "=> {}: {}",
13        Paint::green(name).bold(),
14        Paint::default(value).bold()
15    );
16}
17
18pub struct Logger;
19
20impl log::Log for Logger {
21    fn enabled(&self, metadata: &Metadata) -> bool {
22        metadata.level() <= Level::Info
23    }
24
25    fn log(&self, record: &Record) {
26        if self.enabled(record.metadata()) {
27            println!("{} - {}", record.level(), record.args());
28        }
29    }
30
31    fn flush(&self) {}
32}
33
34pub fn init_logger() {
35    let stdout = ConsoleAppender::builder()
36        .encoder(Box::new(PatternEncoder::new(
37            "[North] {h({d(%Y-%m-%d %H:%M:%S %z)})} {l} [{t}] - {m}{n}",
38        )))
39        .build();
40
41    let requests = FileAppender::builder()
42        .encoder(Box::new(PatternEncoder::new(
43            "[North] {h({d(%Y-%m-%d %H:%M:%S %z)})} {l} [{t}] - {m}{n}",
44        )))
45        .build("log/requests.log")
46        .unwrap();
47
48    let config = Config::builder()
49        .appender(Appender::builder().build("stdout", Box::new(stdout)))
50        .appender(Appender::builder().build("requests", Box::new(requests)))
51        .logger(LoggerRs::builder().build("arangors_lite::response", LevelFilter::Info))
52        .logger(LoggerRs::builder().build("hyper", LevelFilter::Warn))
53        .logger(LoggerRs::builder().build("reqwest", LevelFilter::Warn))
54        .build(Root::builder().appender("stdout").build(LevelFilter::Debug))
55        .unwrap();
56    if log4rs::init_config(config).is_ok() {};
57}