From 5587b5cb8dc1d963167f300ccb82451d44db0538 Mon Sep 17 00:00:00 2001 From: edouardparis Date: Fri, 4 Jul 2025 15:58:37 +0200 Subject: [PATCH] simplify logger_setup --- liana-gui/src/gui/mod.rs | 14 ++--- liana-gui/src/logger.rs | 117 ++++++++++++++------------------------- 2 files changed, 48 insertions(+), 83 deletions(-) diff --git a/liana-gui/src/gui/mod.rs b/liana-gui/src/gui/mod.rs index 9e443b87..943f6f37 100644 --- a/liana-gui/src/gui/mod.rs +++ b/liana-gui/src/gui/mod.rs @@ -15,14 +15,12 @@ use liana_ui::widget::{Column, Container, Element}; pub mod pane; pub mod tab; -use crate::{dir::LianaDirectory, launcher, logger::Logger, VERSION}; +use crate::{dir::LianaDirectory, launcher, logger::setup_logger, VERSION}; pub struct GUI { panes: pane_grid::State, focus: Option, config: Config, - // We may change the directory of log outputs later - _logger: Logger, } #[derive(Debug)] @@ -63,11 +61,10 @@ 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 log_level = log_level.unwrap_or(LevelFilter::INFO); + if let Err(e) = setup_logger(log_level, config.liana_directory.clone()) { + tracing::warn!("Error while setting error: {}", e); + } let mut cmds = vec![Task::perform(ctrl_c(), |_| Message::CtrlC)]; let (pane, cmd) = pane::Pane::new(&config); let (panes, focused_pane) = pane_grid::State::new(pane); @@ -77,7 +74,6 @@ impl GUI { panes, focus: Some(focused_pane), config, - _logger: logger, }, Task::batch(cmds), ) diff --git a/liana-gui/src/logger.rs b/liana-gui/src/logger.rs index f3fe5f53..cba93989 100644 --- a/liana-gui/src/logger.rs +++ b/liana-gui/src/logger.rs @@ -1,12 +1,5 @@ -use std::path::PathBuf; use std::{fs::File, sync::Arc}; -use tracing::error; -use tracing_subscriber::{ - filter, - fmt::{format, writer::BoxMakeWriter, Layer}, - prelude::*, - reload, Registry, -}; +use tracing_subscriber::{filter, fmt::writer::BoxMakeWriter, prelude::*, reload}; use crate::dir::LianaDirectory; @@ -30,70 +23,46 @@ impl From for LoggerError { } } -pub struct Logger { - file_handle: reload::Handle< - Layer, - Registry, - >, - level_handle: reload::Handle, -} - -impl Logger { - pub fn setup(log_level: filter::LevelFilter) -> Logger { - let (log_level, level_handle) = reload::Layer::new(log_level); - let writer = BoxMakeWriter::new(std::io::stderr); - let file_log = tracing_subscriber::fmt::layer() - .with_writer(writer) - .with_file(false); - let (file_log, file_handle) = reload::Layer::new(file_log); - let stdout_log = tracing_subscriber::fmt::layer().pretty().with_file(false); - tracing_subscriber::registry() - .with( - stdout_log - .and_then(file_log) - .with_filter(log_level) - // Add a filter to *both* layers that rejects spans and - // events whose targets start with ``. - .with_filter(filter::filter_fn(|metadata| { - !metadata.target().starts_with("iced_wgpu") - && !metadata.target().starts_with("iced_winit") - && !metadata.target().starts_with("wgpu_core") - && !metadata.target().starts_with("wgpu_hal") - && !metadata.target().starts_with("gfx_backend_vulkan") - && !metadata.target().starts_with("iced_glutin") - && !metadata.target().starts_with("iced_glow") - && !metadata.target().starts_with("glow_glyph") - && !metadata.target().starts_with("naga") - && !metadata.target().starts_with("winit") - && !metadata.target().starts_with("mio") - && !metadata.target().starts_with("ledger_transport_hid") - && !metadata.target().starts_with("cosmic_text") - })), - ) - .init(); - Self { - file_handle, - level_handle, - } - } - - pub fn set_running_mode(&self, datadir: LianaDirectory, log_level: filter::LevelFilter) { - let mut datadir = datadir.path().to_path_buf(); - 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 set_layer( - &self, - destination_path: PathBuf, - log_level: filter::LevelFilter, - ) -> Result<(), LoggerError> { - let file = File::create(destination_path)?; - self.file_handle - .modify(|layer| *layer.writer_mut() = BoxMakeWriter::new(Arc::new(file)))?; - self.level_handle.modify(|filter| *filter = log_level)?; - Ok(()) - } +pub fn setup_logger( + log_level: filter::LevelFilter, + datadir: LianaDirectory, +) -> Result<(), Box> { + let mut log_path = datadir.path().to_path_buf(); + log_path.push(GUI_LOG_FILE_NAME); + + let file = File::create(log_path)?; + let writer = BoxMakeWriter::new(Arc::new(file)); + + let file_log = tracing_subscriber::fmt::layer() + .with_writer(writer) + .with_file(false); + + let stdout_log = tracing_subscriber::fmt::layer().pretty().with_file(false); + + tracing_subscriber::registry() + .with( + stdout_log + .and_then(file_log) + .with_filter(log_level) + // Add a filter to *both* layers that rejects spans and + // events whose targets start with specific prefixes. + .with_filter(filter::filter_fn(|metadata| { + !metadata.target().starts_with("iced_wgpu") + && !metadata.target().starts_with("iced_winit") + && !metadata.target().starts_with("wgpu_core") + && !metadata.target().starts_with("wgpu_hal") + && !metadata.target().starts_with("gfx_backend_vulkan") + && !metadata.target().starts_with("iced_glutin") + && !metadata.target().starts_with("iced_glow") + && !metadata.target().starts_with("glow_glyph") + && !metadata.target().starts_with("naga") + && !metadata.target().starts_with("winit") + && !metadata.target().starts_with("mio") + && !metadata.target().starts_with("ledger_transport_hid") + && !metadata.target().starts_with("cosmic_text") + })), + ) + .init(); + + Ok(()) }