happy-rust 0.1.3

happy-rust让编程轻松愉快
Documentation
use std::fs;
use std::sync::Once;
use log4rs::append::console::ConsoleAppender;
use log4rs::Config;
use log4rs::config::{Appender, Root};
use log4rs::encode::pattern::PatternEncoder;
use log::{error, info, LevelFilter};

static INIT: Once = Once::new();

pub struct HappyLog {
}

impl HappyLog {
    pub fn init_default_log(level: LevelFilter) {
        INIT.call_once(|| {
            HappyLog::_init_default_log(level);
        });
    }

    pub fn init(path: &str) {
        INIT.call_once(|| {
            HappyLog::_init(path);
        });
    }

    fn _init_default_log(level: LevelFilter) {
        let stdout = ConsoleAppender::builder()
            .encoder(Box::new(
                PatternEncoder::new("{d(%Y-%m-%d %H:%M:%S)} {P} [{l}] {m}{n}")
            )).build();

        let default_log_config = Config::builder()
            .appender(
                Appender::builder().build("stdout", Box::new(stdout)))
            .build(
                Root::builder().appender("stdout").build(level),
            ).unwrap();

        match log4rs::init_config(default_log_config) {
            Ok(_) => {
                info!("HappyLog->未启用日志配置文件,加载默认设置。当前运行在【控制台输出】模式下......");
            }
            Err(e) => {
                error!("HappyLog->未启用日志配置文件,加载默认设置出现错误:{}", e);
            }
        }
    }

    fn _init(path: &str) {
        if fs::metadata(path).is_ok() {
            match log4rs::init_file(path, Default::default()) {
                Ok(_) => {
                    info!("HappyLog->加载日志配置文件成功:{}", path);
                }
                Err(e) => {
                    error!("HappyLog->加载日志配置文件出现错误:{}", e);
                }
            }
        } else {
            Self::_init_default_log(LevelFilter::Info);
        }
    }
}

#[macro_export]
macro_rules! hlenter_fn {
    ($fn_name:tt) => {
        log::trace!("Enter function: {}", $fn_name);
    };
}

#[macro_export]
macro_rules! hlinput {
    ($name:tt, $value:tt) => {
        log::trace!("input->{}={}", $name, $value);
    };

    ($name:tt, $($arg:tt)+) => {
        log::trace!("input->{}={}", $name, format!("{}", format_args!($($arg)+)).as_str());
    };
}

#[macro_export]
macro_rules! hlvar {
    ($name:tt, $value:tt) => {
        log::trace!("var->{}={}", $name, $value);
    };

    ($name:tt, $($arg:tt)+) => {
        log::trace!("var->{}={}", $name, format!("{}", format_args!($($arg)+)).as_str());
    };
}

#[macro_export]
macro_rules! hlerror {
    ($($arg:tt)+) => {
        log::trace!("{}", format_args!($($arg)+));
    };
}

#[macro_export]
macro_rules! hlwarn {
    ($($arg:tt)+) => {
        log::warn!("{}", format_args!($($arg)+));
    };
}

#[macro_export]
macro_rules! hlinfo {
    ($($arg:tt)+) => {
        log::info!("{}", format_args!($($arg)+));
    };
}

#[macro_export]
macro_rules! hldebug {
    ($($arg:tt)+) => {
        log::debug!("{}", format_args!($($arg)+));
    };
}

#[macro_export]
macro_rules! hltrace {
    ($($arg:tt)+) => {
        log::trace!("{}", format_args!($($arg)+));
    };
}

#[macro_export]
macro_rules! hloutput {
    ($name:tt, $value:tt) => {
        log::trace!("output->{}={}", $name, $value);
    };

    ($name:tt, $($arg:tt)+) => {
        log::trace!("output->{}={}", $name, format!("{}", format_args!($($arg)+)).as_str());
    };
}

#[macro_export]
macro_rules! hlexit_fn {
    ($fn_name:tt) => {
        log::trace!("Exit function: {}", $fn_name);
    };
}