simplify logger_setup

This commit is contained in:
edouardparis 2025-07-04 15:58:37 +02:00
parent fd858d2b4a
commit 5587b5cb8d
2 changed files with 48 additions and 83 deletions

View File

@ -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<pane::Pane>,
focus: Option<pane_grid::Pane>,
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<LevelFilter>)) -> (GUI, Task<Message>) {
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),
)

View File

@ -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<reload::Error> for LoggerError {
}
}
pub struct Logger {
file_handle: reload::Handle<
Layer<Registry, format::DefaultFields, format::Format, BoxMakeWriter>,
Registry,
>,
level_handle: reload::Handle<filter::LevelFilter, Registry>,
}
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 `<prefix>`.
.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<dyn std::error::Error>> {
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(())
}