diff --git a/rust-bins/duniter-cli/src/duniter_ts_args.rs b/rust-bins/duniter-cli/src/duniter_ts_args.rs index dfda1490a63f59486c76d66cba64cba27357ef08..a190d4eb0647aa88f505d352518d9bdf8dc45378 100644 --- a/rust-bins/duniter-cli/src/duniter_ts_args.rs +++ b/rust-bins/duniter-cli/src/duniter_ts_args.rs @@ -38,16 +38,18 @@ fn gen_webstart_args(args: &DuniterWebstartArgs, duniter_ts_args: &mut Vec<Strin } } -pub(crate) fn gen_duniter_ts_args(args: &DuniterArgs, duniter_js_exe: String) -> Vec<String> { +pub(crate) fn gen_duniter_ts_args( + args: &DuniterArgs, + duniter_js_exe: String, + log_level_filter: log::LevelFilter, +) -> Vec<String> { let mut duniter_ts_args = vec!["--max-old-space-size=4096".to_owned(), duniter_js_exe]; if let Some(ref home) = args.home { duniter_ts_args.push("--home".to_owned()); duniter_ts_args.push(home.to_str().expect("invalid home path").to_owned()); } - if let Some(ref log_level) = args.log { - duniter_ts_args.push("--loglevel".to_owned()); - duniter_ts_args.push(log_level.to_string().to_lowercase()); - } + duniter_ts_args.push("--loglevel".to_owned()); + duniter_ts_args.push(log_level_filter.to_string().to_lowercase()); if let Some(ref profile) = args.profile { duniter_ts_args.push("--mdb".to_owned()); duniter_ts_args.push(profile.clone()); diff --git a/rust-bins/duniter-cli/src/main.rs b/rust-bins/duniter-cli/src/main.rs index 7554dea88fb426a7bcbac6a3c4d1fb56c2231bf3..f10642420db2f64c79737d64319944cba1790121 100644 --- a/rust-bins/duniter-cli/src/main.rs +++ b/rust-bins/duniter-cli/src/main.rs @@ -38,7 +38,7 @@ use logwatcher::{LogWatcher, LogWatcherAction}; use nix::{errno::Errno, sys::signal::Signal, unistd::Pid, Error}; use std::{ fs::File, io::prelude::*, path::Path, path::PathBuf, process::Command, process::Output, - process::Stdio, + process::Stdio, str::FromStr, }; use structopt::{clap::Shell, StructOpt}; @@ -214,6 +214,7 @@ fn main() -> Result<()> { DuniterArgs::clap().gen_completions_to(APP_NAME, shell, &mut std::io::stdout()); Ok(()) } else { + let log_level_filter = get_log_level(args.log)?; let profile_path = get_profile_path(args.profile.as_deref())?; #[cfg(feature = "gva")] @@ -225,7 +226,8 @@ fn main() -> Result<()> { let prod = current_exe == PathBuf::from(DUNITER_EXE_LINK_PATH) || current_exe == PathBuf::from(DUNITER_EXE_PATH); - let duniter_ts_args = duniter_ts_args::gen_duniter_ts_args(&args, duniter_js_exe()?); + let duniter_ts_args = + duniter_ts_args::gen_duniter_ts_args(&args, duniter_js_exe()?, log_level_filter); match args.command { DuniterCommand::Restart => { @@ -325,6 +327,15 @@ pub(crate) fn get_node_version(node_path: &str) -> Result<String> { } } +fn get_log_level(opt: Option<log::LevelFilter>) -> Result<log::LevelFilter> { + if let Ok(log_level_str) = std::env::var("DUNITER_LOG_LEVEL") { + Ok(log::LevelFilter::from_str(&log_level_str) + .map_err(|e| anyhow::Error::msg(e.to_string()))?) + } else { + Ok(opt.unwrap_or(log::LevelFilter::Info)) + } +} + fn get_profile_path(profile: Option<&str>) -> Result<PathBuf> { let mut profile_path = dirs::config_dir().expect("unsupported operating system"); profile_path.push(APP_NAME);