mesa/common/
log_ops.rs

1use std::str::FromStr;
2
3use log::LevelFilter;
4use log4rs::{
5    append::{console::ConsoleAppender, file::FileAppender},
6    config::{Appender, Logger, Root},
7    encode::pattern::PatternEncoder,
8    Config,
9};
10
11// Code base log4rs configuration to avoid having a separate file for this to keep portability
12pub fn configure(log_level: String) {
13    let stdout = ConsoleAppender::builder()
14        .encoder(Box::new(PatternEncoder::new(
15            "{d(%Y-%m-%d %H:%M:%S)} | {h({l}):5.5} | {f}:{L} — {m}{n}",
16        )))
17        .build();
18
19    let requests = FileAppender::builder()
20        .encoder(Box::new(PatternEncoder::new(
21            "{d(%Y-%m-%d %H:%M:%S)} | {({l}):5.5} | {f}:{L} — {m}{n}",
22        )))
23        .build("/var/log/manta/requests.log")
24        .unwrap();
25
26    let config = Config::builder()
27        .appender(Appender::builder().build("stdout", Box::new(stdout)))
28        .appender(Appender::builder().build("requests", Box::new(requests)))
29        .logger(
30            Logger::builder()
31                .appender("stdout")
32                .build("app::backend", LevelFilter::Info),
33        )
34        .logger(
35            Logger::builder()
36                .appender("requests")
37                .additive(false)
38                .build("app::audit", LevelFilter::Info),
39        )
40        .build(
41            Root::builder()
42                .appender("stdout")
43                .build(LevelFilter::from_str(&log_level).unwrap_or(LevelFilter::Error)),
44        )
45        .unwrap();
46
47    let _handle = log4rs::init_config(config).unwrap();
48
49    // use handle to change logger configuration at runtime
50}