From 08c00ae77fa57135c380abca9591ed38ba678c84 Mon Sep 17 00:00:00 2001 From: pompurin404 Date: Sat, 10 Aug 2024 14:08:54 +0800 Subject: [PATCH] set log level --- src/main/core/mihomoApi.ts | 8 ++-- src/renderer/src/pages/logs.tsx | 80 +++++++++++++++++++++---------- src/renderer/src/pages/mihomo.tsx | 4 +- src/renderer/src/pages/rules.tsx | 2 +- 4 files changed, 63 insertions(+), 31 deletions(-) diff --git a/src/main/core/mihomoApi.ts b/src/main/core/mihomoApi.ts index b2567c8..af691d2 100644 --- a/src/main/core/mihomoApi.ts +++ b/src/main/core/mihomoApi.ts @@ -245,12 +245,14 @@ export const stopMihomoLogs = (): void => { } const mihomoLogs = (): void => { - let server = getControledMihomoConfig()['external-controller'] - const secret = getControledMihomoConfig().secret ?? '' + const { secret = '', 'log-level': level = 'info' } = getControledMihomoConfig() + let { 'external-controller': server } = getControledMihomoConfig() if (server?.startsWith(':')) server = `127.0.0.1${server}` stopMihomoLogs() - mihomoLogsWs = new WebSocket(`ws://${server}/logs?token=${encodeURIComponent(secret)}`) + mihomoLogsWs = new WebSocket( + `ws://${server}/logs?token=${encodeURIComponent(secret)}&level=${level}` + ) mihomoLogsWs.onmessage = (e): void => { const data = e.data as string diff --git a/src/renderer/src/pages/logs.tsx b/src/renderer/src/pages/logs.tsx index 045ba07..ccfc159 100644 --- a/src/renderer/src/pages/logs.tsx +++ b/src/renderer/src/pages/logs.tsx @@ -1,28 +1,38 @@ import BasePage from '@renderer/components/base/base-page' import { startMihomoLogs, stopMihomoLogs } from '@renderer/utils/ipc' import LogItem from '@renderer/components/logs/log-item' -import { useEffect, useMemo, useState } from 'react' -import { Input } from '@nextui-org/react' +import { useEffect, useMemo, useRef, useState } from 'react' +import { Button, Input } from '@nextui-org/react' +import { Virtuoso, VirtuosoHandle } from 'react-virtuoso' const Logs: React.FC = () => { const [logs, setLogs] = useState([]) const [filter, setFilter] = useState('') + const [trace, setTrace] = useState(true) + const virtuosoRef = useRef(null) const filteredLogs = useMemo(() => { if (filter === '') return logs return logs.filter((log) => { - return log.payload.includes(filter) + return log.payload.includes(filter) || log.type.includes(filter) }) }, [logs, filter]) + useEffect(() => { + if (!trace) return + virtuosoRef.current?.scrollToIndex({ + index: filteredLogs.length - 1, + behavior: 'smooth', + align: 'end', + offset: 0 + }) + }, [filteredLogs, trace]) + useEffect(() => { startMihomoLogs() window.electron.ipcRenderer.on('mihomoLogs', (_e, log: IMihomoLogInfo) => { - log.time = new Date().toISOString() + log.time = new Date().toLocaleString() setLogs((prevLogs) => { - if (prevLogs.length >= 200) { - prevLogs.shift() - } return [...prevLogs, log] }) }) @@ -35,25 +45,45 @@ const Logs: React.FC = () => { return ( -
- -
- {filteredLogs.map((log, index) => { - return ( - +
+ - ) - })} + +
+ + { + const log = filteredLogs[index] + return ( + + ) + }} + />
) } diff --git a/src/renderer/src/pages/mihomo.tsx b/src/renderer/src/pages/mihomo.tsx index 39b5e55..309ecb2 100644 --- a/src/renderer/src/pages/mihomo.tsx +++ b/src/renderer/src/pages/mihomo.tsx @@ -297,9 +297,9 @@ const Mihomo: React.FC = () => { }} > 静默 - 信息 - 警告 错误 + 警告 + 信息 调试 diff --git a/src/renderer/src/pages/rules.tsx b/src/renderer/src/pages/rules.tsx index c65cc20..52a4f62 100644 --- a/src/renderer/src/pages/rules.tsx +++ b/src/renderer/src/pages/rules.tsx @@ -23,7 +23,7 @@ const Rules: React.FC = () => { return ( -
+