fix: can not filiter log level as expected

This commit is contained in:
Tunglies
2025-08-03 09:52:27 +08:00
parent 3eb2a5b3ef
commit d16c691c0f
10 changed files with 83 additions and 44 deletions

View File

@@ -591,6 +591,13 @@ pub async fn start_logs_monitoring(level: Option<String>) -> CmdResult {
Ok(())
}
/// 停止日志监控
#[tauri::command]
pub async fn stop_logs_monitoring() -> CmdResult {
ipc::stop_logs_monitoring().await;
Ok(())
}
/// 清除日志
#[tauri::command]
pub async fn clear_logs() -> CmdResult {

View File

@@ -153,16 +153,7 @@ impl LogsMonitor {
}
};
let url = if filter_level == "info" {
"/logs".to_string()
} else {
let level_param = if filter_level == "all" {
"debug"
} else {
&filter_level
};
format!("/logs?level={level_param}")
};
let url = "/logs";
logging!(
info,
@@ -173,7 +164,7 @@ impl LogsMonitor {
);
let _ = client
.get(&url)
.get(url)
.timeout(Duration::from_secs(30))
.process_lines(|line| {
Self::process_log_line(line, &filter_level, monitor_current.clone())
@@ -200,6 +191,28 @@ impl LogsMonitor {
);
}
pub async fn stop_monitoring(&self) {
// Stop monitoring task but keep logs
{
let mut handle = self.task_handle.write().await;
if let Some(task) = handle.take() {
task.abort();
logging!(
info,
Type::Ipc,
true,
"LogsMonitor: Stopped monitoring task"
);
}
}
// Reset monitoring level
{
let mut monitoring_level = self.current_monitoring_level.write().await;
*monitoring_level = None;
}
}
async fn create_ipc_client() -> Result<
(std::path::PathBuf, kode_bridge::IpcStreamClient),
Box<dyn std::error::Error + Send + Sync>,
@@ -253,26 +266,12 @@ impl LogsMonitor {
let mut current = self.current.write().await;
current.logs.clear();
current.mark_fresh();
// Also reset monitoring level when clearing logs
{
let mut monitoring_level = self.current_monitoring_level.write().await;
*monitoring_level = None;
}
// Abort current monitoring task
{
let mut handle = self.task_handle.write().await;
if let Some(task) = handle.take() {
task.abort();
logging!(
info,
Type::Ipc,
true,
"LogsMonitor: Stopped monitoring task due to clear_logs"
);
}
}
logging!(
info,
Type::Ipc,
true,
"LogsMonitor: Cleared frontend logs (monitoring continues)"
);
}
pub async fn get_logs_as_json(&self, level: Option<String>) -> serde_json::Value {
@@ -309,6 +308,10 @@ pub async fn start_logs_monitoring(level: Option<String>) {
LogsMonitor::global().start_monitoring(level).await;
}
pub async fn stop_logs_monitoring() {
LogsMonitor::global().stop_monitoring().await;
}
pub async fn clear_logs() {
LogsMonitor::global().clear_logs().await;
}

View File

@@ -5,7 +5,7 @@ pub mod monitor;
pub mod traffic;
pub use general::IpcManager;
pub use logs::{clear_logs, get_logs_json, start_logs_monitoring};
pub use logs::{clear_logs, get_logs_json, start_logs_monitoring, stop_logs_monitoring};
pub use memory::{get_current_memory, get_formatted_memory};
pub use traffic::{get_current_traffic, get_formatted_traffic};

View File

@@ -355,6 +355,7 @@ mod app_init {
// Logging and monitoring
cmd::get_clash_logs,
cmd::start_logs_monitoring,
cmd::stop_logs_monitoring,
cmd::clear_logs,
cmd::get_traffic_data,
cmd::get_memory_data,