diff --git a/CHANGELOG.md b/CHANGELOG.md index 2ae254c8b..0e6165674 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,8 @@ - `secret` secret for jwt token - `userfile` optional userfile with generated userfile in format "username: password" per file, default name is user.txt in config path * Password generation argument --genpwd to generate passwords for userfile. +* Added env var ` M3U_FILTER_LOG` for log level +* Log Level has now module support like `m3u_filter::util=error,m3u_filter::filter=debug,m3u_filter=debug` # v1.1.8(2024-03-06) diff --git a/README.md b/README.md index 1acb15b30..371343a88 100644 --- a/README.md +++ b/README.md @@ -796,7 +796,13 @@ Following log levels are supported: - `warn` - `error` -Use the `-l` or `-log-level` cli-argument to specify the log-level. +Use the `-l` or `--log-level` cli-argument to specify the log-level. + +The log level can be set through environment variable `M3U_FILTER_LOG`. + +Precedence has cli-argument. + +Log Level has module support like `m3u_filter::util=error,m3u_filter::filter=debug,m3u_filter=debug` ## 6. Web-UI diff --git a/src/main.rs b/src/main.rs index 14b30a108..1d5d1ebfd 100644 --- a/src/main.rs +++ b/src/main.rs @@ -75,7 +75,8 @@ const VERSION: &str = env!("CARGO_PKG_VERSION"); fn main() { let args = Args::parse(); - init_logger(args.log_level.as_ref().unwrap_or(&"info".to_string())); + let default_log_level = std::env::var("M3U_FILTER_LOG").unwrap_or_else(|_| "info".to_string()); + init_logger(args.log_level.as_ref().unwrap_or(&default_log_level)); let config_path: String = args.config_path.unwrap_or(file_utils::get_default_config_path()); let config_file: String = args.config_file.unwrap_or(file_utils::get_default_config_file_path(&config_path)); @@ -147,8 +148,19 @@ fn get_log_level(log_level: &str) -> LevelFilter { fn init_logger(log_level: &str) { let mut log_builder = Builder::from_default_env(); - // Set the log level based on the parsed value - log_builder.filter_level(get_log_level(log_level)); + + if log_level.contains('=') { + let pairs: Vec<&str> = log_level.split(',').collect(); + for pair in pairs { + let kv: Vec<&str> = pair.split('=').collect(); + if kv.len() == 2 { + log_builder.filter_module(kv[0].trim(), get_log_level(kv[1].trim())); + } + } + } else { + // Set the log level based on the parsed value + log_builder.filter_level(get_log_level(log_level)); + } log_builder.init(); info!("Log Level {}", get_log_level(log_level)); }