happy_rust/
happylog.rs

1use std::fs;
2use std::sync::Once;
3use log4rs::append::console::ConsoleAppender;
4use log4rs::Config;
5use log4rs::config::{Appender, Root};
6use log4rs::encode::pattern::PatternEncoder;
7use log::{error, info, LevelFilter};
8
9static INIT: Once = Once::new();
10
11pub struct HappyLog {
12}
13
14impl HappyLog {
15    pub fn init_default_log(level: LevelFilter) {
16        INIT.call_once(|| {
17            HappyLog::_init_default_log(level);
18        });
19    }
20
21    pub fn init(path: &str) {
22        INIT.call_once(|| {
23            HappyLog::_init(path);
24        });
25    }
26
27    fn _init_default_log(level: LevelFilter) {
28        let stdout = ConsoleAppender::builder()
29            .encoder(Box::new(
30                PatternEncoder::new("{d(%Y-%m-%d %H:%M:%S)} {P} [{l}] {m}{n}")
31            )).build();
32
33        let default_log_config = Config::builder()
34            .appender(
35                Appender::builder().build("stdout", Box::new(stdout)))
36            .build(
37                Root::builder().appender("stdout").build(level),
38            ).unwrap();
39
40        match log4rs::init_config(default_log_config) {
41            Ok(_) => {
42                info!("HappyLog->未启用日志配置文件,加载默认设置。当前运行在【控制台输出】模式下......");
43            }
44            Err(e) => {
45                error!("HappyLog->未启用日志配置文件,加载默认设置出现错误:{}", e);
46            }
47        }
48    }
49
50    fn _init(path: &str) {
51        if fs::metadata(path).is_ok() {
52            match log4rs::init_file(path, Default::default()) {
53                Ok(_) => {
54                    info!("HappyLog->加载日志配置文件成功:{}", path);
55                }
56                Err(e) => {
57                    error!("HappyLog->加载日志配置文件出现错误:{}", e);
58                }
59            }
60        } else {
61            Self::_init_default_log(LevelFilter::Info);
62        }
63    }
64}
65
66#[macro_export]
67macro_rules! hlenter_fn {
68    ($fn_name:tt) => {
69        log::trace!("Enter function: {}", $fn_name);
70    };
71}
72
73#[macro_export]
74macro_rules! hlinput {
75    ($name:tt, $value:tt) => {
76        log::trace!("input->{}={}", $name, $value);
77    };
78
79    ($name:tt, $($arg:tt)+) => {
80        log::trace!("input->{}={}", $name, format!("{}", format_args!($($arg)+)).as_str());
81    };
82}
83
84#[macro_export]
85macro_rules! hlvar {
86    ($name:tt, $value:tt) => {
87        log::trace!("var->{}={}", $name, $value);
88    };
89
90    ($name:tt, $($arg:tt)+) => {
91        log::trace!("var->{}={}", $name, format!("{}", format_args!($($arg)+)).as_str());
92    };
93}
94
95#[macro_export]
96macro_rules! hlerror {
97    ($($arg:tt)+) => {
98        log::trace!("{}", format_args!($($arg)+));
99    };
100}
101
102#[macro_export]
103macro_rules! hlwarn {
104    ($($arg:tt)+) => {
105        log::warn!("{}", format_args!($($arg)+));
106    };
107}
108
109#[macro_export]
110macro_rules! hlinfo {
111    ($($arg:tt)+) => {
112        log::info!("{}", format_args!($($arg)+));
113    };
114}
115
116#[macro_export]
117macro_rules! hldebug {
118    ($($arg:tt)+) => {
119        log::debug!("{}", format_args!($($arg)+));
120    };
121}
122
123#[macro_export]
124macro_rules! hltrace {
125    ($($arg:tt)+) => {
126        log::trace!("{}", format_args!($($arg)+));
127    };
128}
129
130#[macro_export]
131macro_rules! hloutput {
132    ($name:tt, $value:tt) => {
133        log::trace!("output->{}={}", $name, $value);
134    };
135
136    ($name:tt, $($arg:tt)+) => {
137        log::trace!("output->{}={}", $name, format!("{}", format_args!($($arg)+)).as_str());
138    };
139}
140
141#[macro_export]
142macro_rules! hlexit_fn {
143    ($fn_name:tt) => {
144        log::trace!("Exit function: {}", $fn_name);
145    };
146}