From a7a661e60fc027157ce808994253d7ea5c2ffe93 Mon Sep 17 00:00:00 2001 From: huzibaca Date: Tue, 19 Nov 2024 01:40:45 +0800 Subject: [PATCH] feat: logger support all level filters --- src/hooks/use-log-data.ts | 13 +++++++++---- src/pages/logs.tsx | 11 +++++++---- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/hooks/use-log-data.ts b/src/hooks/use-log-data.ts index 391ed17f..7cf804bc 100644 --- a/src/hooks/use-log-data.ts +++ b/src/hooks/use-log-data.ts @@ -7,7 +7,7 @@ import { create } from "zustand"; const MAX_LOG_NUM = 1000; -export type LogLevel = "warning" | "info" | "debug" | "error"; +export type LogLevel = "warning" | "info" | "debug" | "error" | "all"; interface ILogItem { time?: string; @@ -23,7 +23,11 @@ const buildWSUrl = (server: string, secret: string, logLevel: LogLevel) => { if (secret) { params.append("token", encodeURIComponent(secret)); } - params.append("level", logLevel); + if (logLevel === "all") { + params.append("level", "debug"); + } else { + params.append("level", logLevel); + } const queryString = params.toString(); return queryString ? `${baseUrl}?${queryString}` : baseUrl; }; @@ -41,12 +45,13 @@ const useLogStore = create( info: [], debug: [], error: [], + all: [], }, clearLogs: (level?: LogLevel) => set((state: LogStore) => ({ logs: level ? { ...state.logs, [level]: [] } - : { warning: [], info: [], debug: [], error: [] }, + : { warning: [], info: [], debug: [], error: [], all: [] }, })), appendLog: (level: LogLevel, log: ILogItem) => set((state: LogStore) => { @@ -57,7 +62,7 @@ const useLogStore = create( : [...currentLogs, log]; return { logs: { ...state.logs, [level]: newLogs } }; }), - }) + }), ); export const useLogData = (logLevel: LogLevel) => { diff --git a/src/pages/logs.tsx b/src/pages/logs.tsx index e1c3b46c..e795c1ed 100644 --- a/src/pages/logs.tsx +++ b/src/pages/logs.tsx @@ -22,16 +22,18 @@ const LogPage = () => { const theme = useTheme(); const isDark = theme.palette.mode === "dark"; const [logLevel, setLogLevel] = useLocalStorage( - "log-level", - "info" + "log:log-level", + "info", ); const [match, setMatch] = useState(() => (_: string) => true); const logData = useLogData(logLevel); const filterLogs = useMemo(() => { return logData - ? logData.filter( - (data) => data.type.includes(logLevel) && match(data.payload) + ? logData.filter((data) => + logLevel === "all" + ? match(data.payload) + : data.type.includes(logLevel) && match(data.payload), ) : []; }, [logData, logLevel, match]); @@ -84,6 +86,7 @@ const LogPage = () => { value={logLevel} onChange={(e) => setLogLevel(e.target.value as LogLevel)} > + ALL INFO WARNING ERROR