From 8cc073f4be90f40a33be11bf14ab4e54e2d707b9 Mon Sep 17 00:00:00 2001 From: Jose Quintana Date: Thu, 3 Aug 2023 01:18:45 +0200 Subject: [PATCH] fix: unable to initialize logger in windows fixes #248 regression --- src/bin/server.rs | 10 +++++----- src/logger.rs | 4 +++- src/server.rs | 5 +---- src/settings/mod.rs | 8 +++++--- src/winservice.rs | 5 +++-- 5 files changed, 17 insertions(+), 15 deletions(-) diff --git a/src/bin/server.rs b/src/bin/server.rs index 72792e4..367ad0f 100644 --- a/src/bin/server.rs +++ b/src/bin/server.rs @@ -12,16 +12,16 @@ #[global_allocator] static GLOBAL: tikv_jemallocator::Jemalloc = tikv_jemallocator::Jemalloc; -use static_web_server::Result; +use static_web_server::{Result, Settings}; fn main() -> Result { + let opts = Settings::get(true)?; + #[cfg(windows)] { - use static_web_server::settings::{Commands, Settings}; + use static_web_server::settings::Commands; use static_web_server::winservice; - let opts = Settings::get()?; - if let Some(commands) = opts.general.commands { match commands { Commands::Install {} => { @@ -37,7 +37,7 @@ fn main() -> Result { } // Run the server by default - static_web_server::Server::new()?.run_standalone()?; + static_web_server::Server::new(opts)?.run_standalone()?; Ok(()) } diff --git a/src/logger.rs b/src/logger.rs index 9a707e8..6595ec1 100644 --- a/src/logger.rs +++ b/src/logger.rs @@ -22,7 +22,9 @@ pub fn init(log_level: &str) -> Result { /// Initialize logging builder with its levels. fn configure(level: &str) -> Result { - let level = level.parse::()?; + let level = level + .parse::() + .with_context(|| "failed to parse log level")?; #[cfg(not(windows))] let enable_ansi = true; diff --git a/src/server.rs b/src/server.rs index 84cf310..f4632f3 100644 --- a/src/server.rs +++ b/src/server.rs @@ -36,10 +36,7 @@ pub struct Server { impl Server { /// Create new multi-thread server instance. - pub fn new() -> Result { - // Get server config - let opts = Settings::get()?; - + pub fn new(opts: Settings) -> Result { // Configure number of worker threads let cpus = num_cpus::get(); let worker_threads = match opts.general.threads_multiplier { diff --git a/src/settings/mod.rs b/src/settings/mod.rs index a1ba127..470e0b5 100644 --- a/src/settings/mod.rs +++ b/src/settings/mod.rs @@ -75,7 +75,7 @@ impl Settings { /// Reads CLI/Env and config file options returning the server settings. /// It also takes care to initialize the logging system with its level /// once the `general` settings are determined. - pub fn get() -> Result { + pub fn get(log_init: bool) -> Result { let opts = General::parse(); // Define the general CLI/file options @@ -283,7 +283,9 @@ impl Settings { } // Logging system initialization - logger::init(log_level.as_str())?; + if log_init { + logger::init(log_level.as_str())?; + } tracing::debug!("toml configuration file read successfully"); // File-based "advanced" options @@ -407,7 +409,7 @@ impl Settings { redirects: redirects_entries, }); } - } else { + } else if log_init { // Logging system initialization logger::init(log_level.as_str())?; } diff --git a/src/winservice.rs b/src/winservice.rs index 063ba0d..b6bc5e7 100644 --- a/src/winservice.rs +++ b/src/winservice.rs @@ -72,7 +72,8 @@ fn set_service_state( } fn run_service() -> Result { - let _ = Settings::get()?; + // Log is already initialized so there is no need to do it again. + let opts = Settings::get(false)?; tracing::info!("windows service: starting service setup"); @@ -132,7 +133,7 @@ fn run_service() -> Result { }; // Starting web server - match Server::new() { + match Server::new(opts) { Ok(server) => { if let Err(err) = server.run_as_service(Some(shutdown_rx), stop_handler) { tracing::error!( -- libgit2 1.7.2