diff options
| -rw-r--r-- | CHANGELOG.md | 3 | ||||
| -rw-r--r-- | mullvad-daemon/src/main.rs | 38 |
2 files changed, 24 insertions, 17 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index a51712bdca..7a171198ea 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,9 @@ Line wrap the file at 100 chars. Th #### macOS - Fix fish shell completions when installed via Homebrew on Apple Silicon Macs. +#### Linux +- Don't prevent early boot service from running if logging to a file fails. + ## [2022.5-beta2] - 2022-10-05 ### Added diff --git a/mullvad-daemon/src/main.rs b/mullvad-daemon/src/main.rs index 23946fbf1a..d47d6563da 100644 --- a/mullvad-daemon/src/main.rs +++ b/mullvad-daemon/src/main.rs @@ -48,28 +48,32 @@ fn main() { fn init_logging(config: &cli::Config) -> Result<Option<PathBuf>, String> { let log_dir = get_log_dir(config)?; + let log_path = |filename| log_dir.as_ref().map(|dir| dir.join(filename)); - #[cfg(not(target_os = "linux"))] - let log_file_name = DAEMON_LOG_FILENAME; + let initialize_logging = |log_file: Option<PathBuf>| -> Result<_, String> { + logging::init_logger( + config.log_level, + log_file.as_ref(), + config.log_stdout_timestamps, + ) + .map_err(|e| e.display_chain_with_msg("Unable to initialize logger"))?; + log_panics::init(); + exception_logging::enable(); + version::log_version(); + Ok(()) + }; #[cfg(target_os = "linux")] - let log_file_name = if config.initialize_firewall_and_exit { - EARLY_BOOT_LOG_FILENAME - } else { - DAEMON_LOG_FILENAME - }; + if config.initialize_firewall_and_exit { + if initialize_logging(log_path(EARLY_BOOT_LOG_FILENAME)).is_err() { + let _ = initialize_logging(None); + } + + return Ok(None); + } - let log_file = log_dir.as_ref().map(|dir| dir.join(log_file_name)); + initialize_logging(log_path(DAEMON_LOG_FILENAME))?; - logging::init_logger( - config.log_level, - log_file.as_ref(), - config.log_stdout_timestamps, - ) - .map_err(|e| e.display_chain_with_msg("Unable to initialize logger"))?; - log_panics::init(); - exception_logging::enable(); - version::log_version(); if let Some(ref log_dir) = log_dir { log::info!("Logging to {}", log_dir.display()); } |
