From a9cfb2cfaac163a4de387863c84f55e0aa916671 Mon Sep 17 00:00:00 2001 From: Tunglies <77394545+Tunglies@users.noreply.github.com> Date: Wed, 6 Aug 2025 20:49:54 +0800 Subject: [PATCH] feat: enhance log filtering by adding support for debug level and updating log hierarchy #4293 --- src-tauri/src/ipc/logs.rs | 33 ++++++++++++++++++++++++++---- src/components/log/log-item.tsx | 3 +++ src/pages/logs.tsx | 2 +- src/services/global-log-service.ts | 9 +++----- 4 files changed, 36 insertions(+), 11 deletions(-) diff --git a/src-tauri/src/ipc/logs.rs b/src-tauri/src/ipc/logs.rs index dd55412b..d265827a 100644 --- a/src-tauri/src/ipc/logs.rs +++ b/src-tauri/src/ipc/logs.rs @@ -234,6 +234,19 @@ impl LogsMonitor { // Filter logs based on level if needed let should_include = match filter_level { "all" => true, + "debug" => true, // DEBUG level should include all log types + "info" => { + let log_type = log_data.log_type.to_lowercase(); + matches!(log_type.as_str(), "info" | "warning" | "error") + } + "warning" => { + let log_type = log_data.log_type.to_lowercase(); + matches!(log_type.as_str(), "warning" | "error") + } + "error" => { + let log_type = log_data.log_type.to_lowercase(); + log_type == "error" + } level => log_data.log_type.to_lowercase() == level.to_lowercase(), }; @@ -282,10 +295,22 @@ impl LogsMonitor { .iter() .filter(|log| { if let Some(ref filter_level) = level { - if filter_level == "all" { - true - } else { - log.log_type.to_lowercase() == filter_level.to_lowercase() + match filter_level.as_str() { + "all" => true, + "debug" => true, // DEBUG level should include all log types + "info" => { + let log_type = log.log_type.to_lowercase(); + matches!(log_type.as_str(), "info" | "warning" | "error") + } + "warning" => { + let log_type = log.log_type.to_lowercase(); + matches!(log_type.as_str(), "warning" | "error") + } + "error" => { + let log_type = log.log_type.to_lowercase(); + log_type == "error" + } + level => log.log_type.to_lowercase() == level.to_lowercase(), } } else { true diff --git a/src/components/log/log-item.tsx b/src/components/log/log-item.tsx index 23551473..fec8a9a2 100644 --- a/src/components/log/log-item.tsx +++ b/src/components/log/log-item.tsx @@ -29,6 +29,9 @@ const Item = styled(Box)(({ theme: { palette, typography } }) => ({ '& .type[data-type="info"], & .type[data-type="inf"]': { color: palette.info.main, }, + '& .type[data-type="debug"], & .type[data-type="dbg"]': { + color: palette.text.secondary, + }, "& .data": { color: palette.text.primary, overflowWrap: "anywhere", diff --git a/src/pages/logs.tsx b/src/pages/logs.tsx index d5dd862f..4321c160 100644 --- a/src/pages/logs.tsx +++ b/src/pages/logs.tsx @@ -30,7 +30,7 @@ const LOG_LEVEL_HIERARCHY = { info: ["info", "warning", "error"], warning: ["warning", "error"], error: ["error"], - debug: ["debug"], + debug: ["info", "warning", "error", "debug"], }; const LogPage = () => { diff --git a/src/services/global-log-service.ts b/src/services/global-log-service.ts index f60a159f..2a091e62 100644 --- a/src/services/global-log-service.ts +++ b/src/services/global-log-service.ts @@ -185,10 +185,7 @@ export const clearGlobalLogs = () => { export const useGlobalLogData = (logLevel: LogLevel = "all") => { const logs = useGlobalLogStore((state) => state.logs); - // 根据当前选择的日志等级过滤日志 - if (logLevel === "all") { - return logs; - } else { - return logs.filter((log) => log.type.toLowerCase() === logLevel); - } + // 日志已经在后端根据级别进行了过滤,这里直接返回所有日志 + // 不需要在前端再次过滤,避免重复过滤导致DEBUG日志丢失 + return logs; };