From e771a42f456fb710306d7a2d265aa58c64e7be36 Mon Sep 17 00:00:00 2001 From: edouardparis Date: Fri, 20 Jun 2025 11:08:12 +0200 Subject: [PATCH] Change log destination for a file in the liana directory For simplicity in case of multiple wallets running, all the logs are stored in an unique file in the liana directory --- liana-gui/src/gui/mod.rs | 18 +++++++------- liana-gui/src/gui/tab.rs | 37 ++--------------------------- liana-gui/src/installer/message.rs | 6 +---- liana-gui/src/installer/step/mod.rs | 10 +++----- liana-gui/src/logger.rs | 30 +---------------------- 5 files changed, 17 insertions(+), 84 deletions(-) diff --git a/liana-gui/src/gui/mod.rs b/liana-gui/src/gui/mod.rs index bfa4a208..88357e8a 100644 --- a/liana-gui/src/gui/mod.rs +++ b/liana-gui/src/gui/mod.rs @@ -18,9 +18,10 @@ use crate::{dir::LianaDirectory, logger::Logger, VERSION}; pub struct GUI { state: tab::Tab, - logger: Logger, + // We may change the directory of log outputs later + _logger: Logger, // if set up, it overrides the level filter of the logger. - log_level: Option, + _log_level: Option, } #[derive(Debug)] @@ -62,14 +63,18 @@ impl GUI { pub fn new((config, log_level): (Config, Option)) -> (GUI, Task) { let logger = Logger::setup(log_level.unwrap_or(LevelFilter::INFO)); + logger.set_running_mode( + config.liana_directory.clone(), + log_level.unwrap_or_else(|| log_level.unwrap_or(LevelFilter::INFO)), + ); let mut cmds = vec![Task::perform(ctrl_c(), |_| Message::CtrlC)]; let (state, cmd) = tab::Tab::new(config.liana_directory, config.network); cmds.push(cmd.map(Message::Tab)); ( Self { state, - logger, - log_level, + _logger: logger, + _log_level: log_level, }, Task::batch(cmds), ) @@ -90,10 +95,7 @@ impl GUI { focus_next() } } - Message::Tab(msg) => self - .state - .update(msg, &self.logger, self.log_level) - .map(Message::Tab), + Message::Tab(msg) => self.state.update(msg).map(Message::Tab), _ => Task::none(), } } diff --git a/liana-gui/src/gui/tab.rs b/liana-gui/src/gui/tab.rs index 854dfa0c..676640f5 100644 --- a/liana-gui/src/gui/tab.rs +++ b/liana-gui/src/gui/tab.rs @@ -2,7 +2,6 @@ use std::{collections::HashMap, sync::Arc}; use iced::{Subscription, Task}; use tracing::{error, info}; -use tracing_subscriber::filter::LevelFilter; extern crate serde; extern crate serde_json; @@ -24,7 +23,6 @@ use crate::{ installer::{self, Installer}, launcher::{self, Launcher}, loader::{self, Loader}, - logger::Logger, services::connect::{ client::backend::{api, BackendWalletClient}, login, @@ -62,12 +60,7 @@ impl Tab { ) } - pub fn update( - &mut self, - message: Message, - logger: &Logger, - log_level: Option, - ) -> Task { + pub fn update(&mut self, message: Message) -> Task { match (&mut self.0, message) { (State::Launcher(l), Message::Launch(msg)) => match *msg { launcher::Message::Install(datadir, network, init) => { @@ -83,21 +76,11 @@ impl Tab { ); } } - logger.set_installer_mode( - datadir.clone(), - log_level.unwrap_or(LevelFilter::INFO), - ); - let (install, command) = Installer::new(datadir, network, None, init); self.0 = State::Installer(Box::new(install)); command.map(|msg| Message::Install(Box::new(msg))) } launcher::Message::Run(datadir_path, cfg, network, settings) => { - logger.set_running_mode( - datadir_path.clone(), - network, - log_level.unwrap_or_else(|| cfg.log_level().unwrap_or(LevelFilter::INFO)), - ); if settings.remote_backend_auth.is_some() { let (login, command) = login::LianaLiteLogin::new(datadir_path, network, settings); @@ -136,12 +119,6 @@ impl Tab { .join(app::config::DEFAULT_FILE_NAME), ) .expect("A gui configuration file must be present"); - logger.set_running_mode( - l.datadir.clone(), - l.network, - config.log_level().unwrap_or(LevelFilter::INFO), - ); - let (app, command) = create_app_with_remote_backend( l.settings.clone(), backend_client, @@ -158,7 +135,7 @@ impl Tab { _ => l.update(*msg).map(|msg| Message::Login(Box::new(msg))), }, (State::Installer(i), Message::Install(msg)) => { - if let installer::Message::Exit(settings, internal_bitcoind, remove_log) = *msg { + if let installer::Message::Exit(settings, internal_bitcoind) = *msg { if settings.remote_backend_auth.is_some() { let (login, command) = login::LianaLiteLogin::new(i.datadir.clone(), i.network, *settings); @@ -173,16 +150,6 @@ impl Tab { ) .expect("A gui configuration file must be present"); - logger.set_running_mode( - i.datadir.clone(), - i.network, - log_level - .unwrap_or_else(|| cfg.log_level().unwrap_or(LevelFilter::INFO)), - ); - if remove_log { - logger.remove_install_log_file(i.datadir.clone()); - } - let (loader, command) = Loader::new( i.datadir.clone(), cfg, diff --git a/liana-gui/src/installer/message.rs b/liana-gui/src/installer/message.rs index c5453259..0cbee993 100644 --- a/liana-gui/src/installer/message.rs +++ b/liana-gui/src/installer/message.rs @@ -31,11 +31,7 @@ use crate::{ #[derive(Debug, Clone)] pub enum Message { UserActionDone(bool), - Exit( - Box, - Option, - /* remove log */ bool, - ), + Exit(Box, Option), Clibpboard(String), Next, Skip, diff --git a/liana-gui/src/installer/step/mod.rs b/liana-gui/src/installer/step/mod.rs index cf3d31bf..2fa2fafd 100644 --- a/liana-gui/src/installer/step/mod.rs +++ b/liana-gui/src/installer/step/mod.rs @@ -129,27 +129,23 @@ impl Step for Final { Message::AllKeysRedeemed => { self.generating = false; // If any errors occurred redeeming tokens, add a warning to the log. - let mut has_error = false; for (pk, res) in &self.key_redemptions { if let Some(res) = res { if let Err(e) = res { warn!("Error redeeming key for token '{}': '{}'.", pk.token, e); - has_error = true; } } else { // We expect to have all redemption results by now. warn!("Missing redemption info for token '{}'.", pk.token); - has_error = true; } } // Now exit the installer whether or not any redemption errors occurred. let internal_bitcoind = self.internal_bitcoind.clone(); let settings = self.wallet_settings.clone().expect("Install is done"); - // If there were any errors, don't remove the installer log. return Task::perform( - async move { (settings, internal_bitcoind, has_error) }, - |(settings, internal_bitcoind, has_error)| { - Message::Exit(Box::new(settings), internal_bitcoind, !has_error) + async move { (settings, internal_bitcoind) }, + |(settings, internal_bitcoind)| { + Message::Exit(Box::new(settings), internal_bitcoind) }, ); } diff --git a/liana-gui/src/logger.rs b/liana-gui/src/logger.rs index 541234e2..f3fe5f53 100644 --- a/liana-gui/src/logger.rs +++ b/liana-gui/src/logger.rs @@ -1,4 +1,3 @@ -use liana::miniscript::bitcoin::Network; use std::path::PathBuf; use std::{fs::File, sync::Arc}; use tracing::error; @@ -11,7 +10,6 @@ use tracing_subscriber::{ use crate::dir::LianaDirectory; -const INSTALLER_LOG_FILE_NAME: &str = "installer.log"; const GUI_LOG_FILE_NAME: &str = "liana-gui.log"; #[derive(Debug)] @@ -79,40 +77,14 @@ impl Logger { } } - pub fn set_installer_mode(&self, datadir: LianaDirectory, log_level: filter::LevelFilter) { + pub fn set_running_mode(&self, datadir: LianaDirectory, log_level: filter::LevelFilter) { let mut datadir = datadir.path().to_path_buf(); - datadir.push(INSTALLER_LOG_FILE_NAME); - if let Err(e) = self.set_layer(datadir, log_level) { - error!("Failed to change logger settings: {:#?}", e); - } - } - - pub fn set_running_mode( - &self, - datadir: LianaDirectory, - network: Network, - log_level: filter::LevelFilter, - ) { - let mut datadir = datadir.path().to_path_buf(); - datadir.push(network.to_string()); datadir.push(GUI_LOG_FILE_NAME); if let Err(e) = self.set_layer(datadir, log_level) { error!("Failed to change logger settings: {:#?}", e); } } - pub fn remove_install_log_file(&self, datadir: LianaDirectory) { - let mut datadir = datadir.path().to_path_buf(); - datadir.push(INSTALLER_LOG_FILE_NAME); - if let Err(e) = std::fs::remove_file(&datadir) { - error!( - "Failed to remove installer log file {} error:{:#?}", - datadir.to_string_lossy(), - e - ); - } - } - pub fn set_layer( &self, destination_path: PathBuf,