alfred_workflow_rust_project/
alfred_logger.rs

1use log::LevelFilter;
2
3
4use log4rs::append::rolling_file::policy::compound::roll::fixed_window::{
5    FixedWindowRoller,
6};
7use log4rs::append::rolling_file::policy::compound::trigger::size::SizeTrigger;
8use log4rs::append::rolling_file::policy::compound::{CompoundPolicy};
9use log4rs::append::rolling_file::RollingFileAppender;
10use log4rs::config::{Appender, Root};
11use log4rs::encode::pattern::PatternEncoder;
12use log4rs::Config;
13
14
15pub struct Logger {}
16
17
18impl Logger {
19    pub fn init() {
20        let appender_name = "app_log_appender";
21        let log_path = std::env::var("HOME").unwrap();
22        let log_name = format!("{}/.alfred/ali_workflow.log", log_path);
23        let archive_name = log_name.as_str().to_owned() + "{}";
24        let config = Config::builder()
25            .appender(
26                Appender::builder().build(
27                    appender_name,
28                    Box::new(
29                        RollingFileAppender::builder()
30                            .append(true)
31                            .encoder(Box::new(PatternEncoder::new(
32                                "{d(%+)(local)} {h({l})} [{f}-> line:{L}]  {m}-{n}",
33                            )))
34                            .build(
35                                log_name,
36                                Box::new(CompoundPolicy::new(
37                                    Box::new(SizeTrigger::new(1023)),
38                                    Box::new(
39                                        FixedWindowRoller::builder()
40                                            .build(&archive_name, 10)
41                                            .unwrap(),
42                                    ),
43                                )),
44                            )
45                            .unwrap(),
46                    ),
47                ),
48            )
49            .build(
50                Root::builder()
51                    .appender(appender_name)
52                    .build(LevelFilter::Trace),
53            )
54            .unwrap();
55
56        log4rs::init_config(config).unwrap();
57    }
58}