diff --git a/.env.template b/.env.template index b7070586b4..be8da8407b 100644 --- a/.env.template +++ b/.env.template @@ -370,6 +370,13 @@ ## routes and static file, websocket and alive requests # LOG_LEVEL=info +## log level target override +## Change the verbosity of specific log output +## Format is a line for each "target=log_level" +#LOG_LEVEL_OVERRIDE=" +#routes=warn +#" + ## Token for the admin interface, preferably an Argon2 PCH string ## Vaultwarden has a built-in generator by calling `vaultwarden hash` ## For details see: https://github.com/dani-garcia/vaultwarden/wiki/Enabling-admin-page#secure-the-admin_token diff --git a/src/config.rs b/src/config.rs index 42d42963ac..cbc6b6171b 100644 --- a/src/config.rs +++ b/src/config.rs @@ -1,9 +1,11 @@ use std::collections::HashMap; use std::env::consts::EXE_SUFFIX; use std::process::exit; +use std::str::FromStr; use std::sync::RwLock; use job_scheduler_ng::Schedule; +use log::LevelFilter; use once_cell::sync::Lazy; use reqwest::Url; @@ -581,6 +583,8 @@ make_config! { log_file: String, false, option; /// Log level log_level: String, false, def, "Info".to_string(); + /// Override individual log level + log_level_override: String, false, def, String::new(); /// Enable DB WAL |> Turning this off might lead to worse performance, but might help if using vaultwarden on some exotic filesystems, /// that do not support WAL. Please make sure you read project wiki on the topic before changing this setting. @@ -1411,6 +1415,19 @@ impl Config { pub fn sso_organizations_id_mapping_map(&self) -> HashMap { parse_as_hashmap(self.sso_organizations_id_mapping()) } + + pub fn log_overrides(&self) -> Vec<(String, LevelFilter)> { + parse_param_list(self.log_level_override()) + .into_iter() + .filter_map(|(k, v)| match LevelFilter::from_str(&v) { + Ok(lv) => Some((k, lv)), + Err(_) => { + println!("[WARNING] Invalid log level: {k}={v}"); + None + } + }) + .collect() + } } use handlebars::{ diff --git a/src/main.rs b/src/main.rs index 4a68764c7f..d4ece14e61 100644 --- a/src/main.rs +++ b/src/main.rs @@ -286,6 +286,10 @@ fn init_logging(level: log::LevelFilter) -> Result<(), fern::InitError> { logger = logger.level_for("lettre::transport::smtp", log::LevelFilter::Off) } + for (path, level) in CONFIG.log_overrides() { + logger = logger.level_for(path, level); + } + if CONFIG.extended_logging() { logger = logger.format(|out, message, record| { out.finish(format_args!(