From b8c82320d362165859a569ae3588dc4ed454f698 Mon Sep 17 00:00:00 2001 From: Tunglies <77394545+Tunglies@users.noreply.github.com> Date: Sun, 21 Sep 2025 01:31:08 +0800 Subject: [PATCH] refactor: enhance logging system with NoExternModule for better log filtering --- src-tauri/src/utils/init.rs | 9 +++------ src-tauri/src/utils/logging.rs | 23 +++++++++++++++++++++++ 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src-tauri/src/utils/init.rs b/src-tauri/src/utils/init.rs index e9ee216dc..d3c7b7e46 100644 --- a/src-tauri/src/utils/init.rs +++ b/src-tauri/src/utils/init.rs @@ -1,8 +1,7 @@ cfg_if::cfg_if! { if #[cfg(not(feature = "tauri-dev"))] { - use crate::utils::logging::{console_colored_format, file_format}; + use crate::utils::logging::{console_colored_format, file_format, NoExternModule}; use flexi_logger::{Cleanup, Criterion, Duplicate, FileSpec, LogSpecification, Logger}; - use log::LevelFilter; } } @@ -24,9 +23,6 @@ use tokio::fs::DirEntry; #[cfg(not(feature = "tauri-dev"))] pub async fn init_logger() -> Result<()> { let log_level = Config::verge().await.latest_ref().get_log_level(); - if log_level == LevelFilter::Off { - return Err(anyhow::anyhow!("logging is disabled")); - } let log_dir = dirs::app_logs_dir()?; let logger = Logger::with(LogSpecification::from(log_level)) @@ -43,7 +39,8 @@ pub async fn init_logger() -> Result<()> { }, // TODO 提供前端设置最大保留文件数量 Cleanup::Never, - ); + ) + .filter(Box::new(NoExternModule)); let _handle = logger.start()?; diff --git a/src-tauri/src/utils/logging.rs b/src-tauri/src/utils/logging.rs index c89d68724..ed756314c 100644 --- a/src-tauri/src/utils/logging.rs +++ b/src-tauri/src/utils/logging.rs @@ -1,3 +1,5 @@ +use flexi_logger::filter::LogLineFilter; + cfg_if::cfg_if! { if #[cfg(feature = "tauri-dev")] { use std::fmt; @@ -171,6 +173,27 @@ macro_rules! logging_error { }; } +#[cfg(not(feature = "tauri-dev"))] +static IGNORE_MODULES: &[&str] = &["tauri", "wry"]; +#[cfg(not(feature = "tauri-dev"))] +pub struct NoExternModule; +#[cfg(not(feature = "tauri-dev"))] +impl LogLineFilter for NoExternModule { + fn write( + &self, + now: &mut DeferredNow, + record: &Record, + log_line_writer: &dyn flexi_logger::filter::LogLineWriter, + ) -> std::io::Result<()> { + let module_path = record.module_path().unwrap_or_default(); + if IGNORE_MODULES.iter().any(|m| module_path.starts_with(m)) { + Ok(()) + } else { + log_line_writer.write(now, record) + } + } +} + #[cfg(not(feature = "tauri-dev"))] pub fn get_log_level(log_level: &LevelFilter) -> String { #[cfg(feature = "verge-dev")]