From abf479a3c98cdb95a6422ff20682027217a9b602 Mon Sep 17 00:00:00 2001 From: Timshel Date: Thu, 1 Feb 2024 17:32:15 +0100 Subject: [PATCH] Allow to override log level for specific target --- .env.template | 7 +++++++ src/config.rs | 17 +++++++++++++++++ src/main.rs | 4 ++++ 3 files changed, 28 insertions(+) diff --git a/.env.template b/.env.template index 991d0f7a1e..90d6ec8613 100644 --- a/.env.template +++ b/.env.template @@ -374,6 +374,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 dc20b2bace..f9aa228e0b 100644 --- a/src/config.rs +++ b/src/config.rs @@ -1,8 +1,10 @@ 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; @@ -573,6 +575,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. @@ -1379,6 +1383,19 @@ impl Config { pub fn sso_authorize_extra_params_vec(&self) -> Vec<(String, String)> { parse_param_list(self.sso_authorize_extra_params()) } + + 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 b1a078c4ff..71318f54af 100644 --- a/src/main.rs +++ b/src/main.rs @@ -282,6 +282,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!(