zbus_lib/
log_config.rs

1use log::{debug, error, info, LevelFilter, SetLoggerError, trace, warn};
2use log4rs::{
3    append::{
4        console::{ConsoleAppender, Target},
5        file::FileAppender,
6    },
7    config::{Appender, Config, Root},
8    encode::pattern::PatternEncoder,
9    filter::threshold::ThresholdFilter,
10};
11
12// 为配合docker 配置改为环境变量方式和命令行参数方式
13pub fn init_log_config() -> Result<(), SetLoggerError> {
14    let level = log::LevelFilter::Debug;
15    let file_path = "d:/tmp/foo.log";
16
17    // Build a stderr logger.
18    let stderr = ConsoleAppender::builder().encoder(
19        Box::new(PatternEncoder::new("[{d(%Y-%m-%d %H:%M:%S)} {T} {h({l})} {M}/{f}:{L}] - {m}\n"))
20    ).target(Target::Stderr).build();
21
22    // Logging to log file.
23    let logfile = FileAppender::builder()
24        // Pattern: https://docs.rs/log4rs/*/log4rs/encode/pattern/index.html
25        .encoder(Box::new(PatternEncoder::new("[{d(%Y-%m-%d %H:%M:%S)} {T} {h({l})} {M}/{f}:{L}] - {m}\n")))
26        .build(file_path)
27        .unwrap();
28
29    // Log Trace level output to file where trace is the default level
30    // and the programmatically specified level to stderr.
31    let config = Config::builder()
32        .appender(Appender::builder().build("logfile", Box::new(logfile)))
33        .appender(
34            Appender::builder()
35                .filter(Box::new(ThresholdFilter::new(level)))
36                .build("stderr", Box::new(stderr)),
37        )
38        .build(
39            Root::builder()
40                .appender("logfile")
41                .appender("stderr")
42                .build(LevelFilter::Trace),
43        )
44        .unwrap();
45
46    let _handle = log4rs::init_config(config)?;
47    Ok(())
48}