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
12pub fn init_log_config() -> Result<(), SetLoggerError> {
14 let level = log::LevelFilter::Debug;
15 let file_path = "d:/tmp/foo.log";
16
17 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 let logfile = FileAppender::builder()
24 .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 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}