66 lines
2.0 KiB
Rust
66 lines
2.0 KiB
Rust
use log::LevelFilter;
|
|
use rust_util::{simple_error, XResult};
|
|
use std::{env, fs};
|
|
|
|
const DEFAULT_LOG4RS_CONFIG: &str = r##"refresh_rate: 10 seconds
|
|
appenders:
|
|
file:
|
|
kind: rolling_file
|
|
path: "log/local_mini_kms_log.log"
|
|
append: true
|
|
encoder:
|
|
pattern: "{d} - {m}{n}"
|
|
policy:
|
|
kind: compound
|
|
trigger:
|
|
kind: size
|
|
limit: 100 mb
|
|
roller:
|
|
kind: fixed_window
|
|
pattern: log/local_mini_kms_log.{}.log
|
|
count: 10
|
|
root:
|
|
level: info
|
|
appenders:
|
|
- file"##;
|
|
|
|
pub fn init_logger(log_level: Option<&str>, log4rs_file: Option<&str>) -> XResult<()> {
|
|
match log4rs_file {
|
|
None => {
|
|
let level = match env::var("LOGGER").ok().as_deref().map(get_log_level_filter) {
|
|
Some(Ok(level)) => level,
|
|
_ => log_level.map(get_log_level_filter).unwrap_or(Ok(LevelFilter::Debug))?,
|
|
};
|
|
let _ = env_logger::builder().filter_level(level).try_init();
|
|
}
|
|
Some(log4rs_file) => {
|
|
let log4rs_config_file = if log4rs_file == "#DEFAULT" {
|
|
let default_log4rs_file = "default_log4rs.yaml";
|
|
let _ = fs::metadata(default_log4rs_file).map_err(|_| {
|
|
fs::write(default_log4rs_file, DEFAULT_LOG4RS_CONFIG).map_err(|e| {
|
|
println!("Write file: {} failed: {}", default_log4rs_file, e);
|
|
})
|
|
});
|
|
default_log4rs_file
|
|
} else {
|
|
log4rs_file
|
|
};
|
|
log4rs::init_file(log4rs_config_file, Default::default())?;
|
|
}
|
|
}
|
|
Ok(())
|
|
}
|
|
|
|
|
|
fn get_log_level_filter(log_level: &str) -> XResult<LevelFilter> {
|
|
Ok(match log_level {
|
|
"trace" => LevelFilter::Trace,
|
|
"debug" => LevelFilter::Debug,
|
|
"info" => LevelFilter::Info,
|
|
"warn" => LevelFilter::Warn,
|
|
"error" => LevelFilter::Error,
|
|
_ => {
|
|
return simple_error!("invalid log_level");
|
|
}
|
|
})
|
|
} |