From 1cc8e67fb1f91b35f4534a719a2fef484356d893 Mon Sep 17 00:00:00 2001 From: lifegpc Date: Sat, 21 Sep 2024 05:08:24 +0000 Subject: [PATCH] Add support to load log4rs config file --- .github/workflows/CI.yml | 1 + .github/workflows/docker.yml | 1 + .github/workflows/github-pages.yaml | 1 + log-cfg.yml | 39 +++++++++++++++++++++++++++++ src/log_cfg.rs | 11 ++++++++ src/opthelper.rs | 12 +++++++++ src/settings_list.rs | 1 + 7 files changed, 66 insertions(+) create mode 100644 log-cfg.yml diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index b60c294..f1f24b5 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -9,6 +9,7 @@ on: - 'doc/**' - Dockerfile - docker-compose.yml + - log-cfg.yml - README.md pull_request: branches: [ master ] diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 1f79e56..20d6790 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -8,6 +8,7 @@ on: - '.github/workflows/github-pages.yaml' - 'doc/**' - docker-compose.yml + - log-cfg.yml - README.md workflow_dispatch: diff --git a/.github/workflows/github-pages.yaml b/.github/workflows/github-pages.yaml index b2d562a..e5868b5 100644 --- a/.github/workflows/github-pages.yaml +++ b/.github/workflows/github-pages.yaml @@ -13,6 +13,7 @@ on: - 'doc/**' - Dockerfile - docker-compose.yml + - log-cfg.yml - README.md # Allows you to run this workflow manually from the Actions tab diff --git a/log-cfg.yml b/log-cfg.yml new file mode 100644 index 0000000..d2a2bde --- /dev/null +++ b/log-cfg.yml @@ -0,0 +1,39 @@ +appenders: + stdout: + kind: console + encoder: + pattern: "{m}{n}" + requests: + kind: rolling_file + path: "log/requests.log" + encoder: + pattern: "{d} - {m}{n}" + policy: + kind: compound + trigger: + kind: size + limit: 1mb + roller: + kind: fixed_window + base: 1 + count: 5 + pattern: "logs/requests.{}.log" +root: + level: info + appenders: + - stdout +loggers: + html5ever::tree_builder: + level: warn + html5ever::tokenizer: + level: warn + html5ever::tokenizer::char_ref: + level: warn + reqwest::connect: + level: warn + server: + level: info + appenders: + - requests + additive: false + diff --git a/src/log_cfg.rs b/src/log_cfg.rs index 36a1de2..df2dcc4 100644 --- a/src/log_cfg.rs +++ b/src/log_cfg.rs @@ -32,6 +32,17 @@ pub fn init_with_level(level: LevelFilter) { } } +pub fn init_with_file(path: String) { + let config = log4rs::config::load_config_file(path, Default::default()).unwrap(); + let mut h = HANDLE.get_mut(); + if let Some(h) = h.as_ref() { + h.set_config(config); + } else { + let handle = init_config(config).unwrap(); + h.replace(handle); + } +} + pub fn init_default() { init_with_level(LevelFilter::Info); } diff --git a/src/opthelper.rs b/src/opthelper.rs index 89b6e16..29c8c17 100644 --- a/src/opthelper.rs +++ b/src/opthelper.rs @@ -384,6 +384,13 @@ impl OptHelper { pub fn init_log(&self) { if self.opt.get_ref().verbose { crate::log_cfg::init_with_level(log::LevelFilter::Debug); + } else { + match self.log_cfg() { + Some(cfg) => { + crate::log_cfg::init_with_file(cfg); + } + None => {} + } } } @@ -644,6 +651,11 @@ impl OptHelper { return PathBuf::from("/app/temp"); std::env::temp_dir() } + + /// The path to config file of [log4rs] + pub fn log_cfg(&self) -> Option { + return self.settings.get_ref().get_str("log-cfg"); + } } impl Default for OptHelper { diff --git a/src/settings_list.rs b/src/settings_list.rs index 1aea363..93e4d7c 100644 --- a/src/settings_list.rs +++ b/src/settings_list.rs @@ -75,6 +75,7 @@ pub fn get_settings_list() -> Vec { #[cfg(feature = "server")] SettingDes::new("push-task-max-push-count", gettext("The maximum number of tasks to push to client at the same time."), JsonValueType::Number, Some(check_nozero_usize)).unwrap(), SettingDes::new("fanbox-http-headers", gettext("Extra http headers for fanbox.cc."), JsonValueType::Object, Some(check_header_map)).unwrap(), + SettingDes::new("log-cfg", gettext("The path to the config file of log4rs."), JsonValueType::Str, None).unwrap(), ] }