Skip to main content

napi_package_template/
logger.rs

1#![allow(non_snake_case)]
2#![allow(dead_code)]
3#![allow(unused_variables)]
4#![allow(unused_imports)]
5#![allow(unused_attributes)]
6#![allow(non_snake_case)]
7#![allow(unused_mut)]
8#![allow(unused_assignments)]
9#![allow(unused_unsafe)]
10
11use std::collections::{HashMap, HashSet};
12use std::thread;
13
14use lazy_static::lazy_static;
15use log4rs::append::rolling_file::policy::compound::{roll::fixed_window::FixedWindowRoller, trigger::size::SizeTrigger, CompoundPolicy};
16use log4rs::append::Append;
17use log4rs::append::{console::ConsoleAppender, file::FileAppender, rolling_file::RollingFileAppender};
18use log4rs::config::{Appender, Logger, Root};
19use log4rs::encode::json::{JsonEncoder, JsonEncoderConfig};
20use log4rs::encode::pattern::PatternEncoder;
21use log4rs::encode::writer::simple::SimpleWriter;
22use log4rs::encode::Style;
23use log4rs::filter::threshold::ThresholdFilter;
24use log4rs::filter::{Filter, FilterConfig};
25use log4rs::Config;
26
27use crate::configration;
28use log::{Level, LevelFilter, Record};
29
30lazy_static! {
31    //Most of these will define in config File.
32    // static ref LOG_LINE_PATTERN_CONSOLE: &'static str = "{d(%Y-%m-%d %H:%M:%S)} | {({l}):5.5} | {f}:{L} — {m}{n}";
33    // static ref LOG_LINE_PATTERN_FILE: &'static str = "{d(%Y-%m-%d %H:%M:%S)} | {({l}):5.5} | {f}:{L} — {m}{n}";
34
35    static ref TRIGGER_FILE_SIZE : u64 = configration::get::<u64>(&"logger.logFileSize".to_string());
36    static ref ROLLER_FILEPATH_PATTERN: String  = configration::get::<String>(&"logger.roller_filepath_pattern".to_string());
37    static ref ROLLER_MAX_COUNT: u32 = configration::get::<u32>(&"logger.roller_max_count".to_string()) as u32;
38    static ref ROLLER_BASE_START: u32 = configration::get::<u32>(&"logger.roller_base_start".to_string()) as u32;
39    static ref ALL_LOG_FILE_PATH:String = configration::get::<String>(&"logger.all_logs_common_file_path".to_string());
40}
41
42pub struct RollingFileAppenderComponent {
43    pub trigger: Box<SizeTrigger>,
44    pub roller: Box<FixedWindowRoller>,
45    pub compound_policy: Box<CompoundPolicy>,
46}
47impl RollingFileAppenderComponent {
48    pub fn new() -> Box<CompoundPolicy> {
49        //Set trigger, roller and compoundPolicy for "RollingFileAppender"
50        let trigger = Box::new(SizeTrigger::new(*TRIGGER_FILE_SIZE));
51        let roller = Box::new(FixedWindowRoller::builder().base(*ROLLER_BASE_START).build(&ROLLER_FILEPATH_PATTERN, *ROLLER_MAX_COUNT).unwrap());
52        let compound_policy = Box::new(CompoundPolicy::new(trigger.clone(), roller.clone()));
53        return compound_policy;
54    }
55}
56
57pub struct LoggerConfig {}
58impl LoggerConfig {
59    pub fn create_Global_logs_config() -> Config {
60        //===== get compound Policy =====
61        let compound_policy: Box<CompoundPolicy> = RollingFileAppenderComponent::new();
62
63        //===== set appanders for console and file =====
64        let console_appender = ConsoleAppender::builder().encoder(Box::new(PatternEncoder::new("{l} - {m}{n}"))).build();
65
66        // Pattern vise logs
67        // let all_log_appender = RollingFileAppender::builder()
68        // .encoder(Box::new(PatternEncoder::new(&LOG_LINE_PATTERN_FILE)))
69        // .build(*ALL_LOG_FILE_PATH, compound_policy)
70        // .unwrap();
71
72        //json format logs
73        let all_log_appender = RollingFileAppender::builder().encoder(Box::new(JsonEncoder::new())).build(*&ALL_LOG_FILE_PATH.as_str(), compound_policy).unwrap();
74
75        //===== create config =====
76        //ThresholdFilter is mendatory for set LogLevel on specific appenders
77        //describe all appenders in config. and declare only that appanders name in Root which you want to use.
78        //set your Max(Default) Log-level in Root.
79
80        // TO-DO : replace level og log
81
82        let Global_logs_config = Config::builder()
83            .appender(Appender::builder().filter(Box::new(ThresholdFilter::new(LevelFilter::Info))).build("console_appender", Box::new(console_appender)))
84            .appender(Appender::builder().filter(Box::new(ThresholdFilter::new(LevelFilter::Error))).build("all_log_appender", Box::new(all_log_appender)))
85            .logger(Logger::builder().appender("all_log_appender").additive(true).build("All-Logs", LevelFilter::Error))
86            .logger(Logger::builder().appender("console_appender").additive(true).build("console", LevelFilter::Info))
87            .build(Root::builder().appenders(["console_appender", "all_log_appender"]).build(LevelFilter::Trace))
88            .unwrap();
89        return Global_logs_config;
90    }
91}
92