set log level

This commit is contained in:
pompurin404 2024-08-10 14:08:54 +08:00
parent 282c06992c
commit 08c00ae77f
No known key found for this signature in database
4 changed files with 63 additions and 31 deletions

View File

@ -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

View File

@ -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<IMihomoLogInfo[]>([])
const [filter, setFilter] = useState('')
const [trace, setTrace] = useState(true)
const virtuosoRef = useRef<VirtuosoHandle>(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 (
<BasePage title="实时日志">
<div className="sticky top-[48px] z-40 backdrop-blur bg-background/40 flex p-2">
<Input
variant="bordered"
size="sm"
value={filter}
placeholder="筛选过滤"
onValueChange={setFilter}
/>
</div>
{filteredLogs.map((log, index) => {
return (
<LogItem
key={log.payload + index}
time={log.time}
type={log.type}
payload={log.payload}
<div className="sticky top-[49px] z-40 backdrop-blur bg-background/40 flex p-2">
<div className="w-full flex">
<Input
variant="bordered"
size="sm"
value={filter}
placeholder="筛选过滤"
onValueChange={setFilter}
/>
)
})}
<Button
size="sm"
className="ml-2"
color={trace ? 'primary' : 'default'}
variant={trace ? 'solid' : 'bordered'}
onPress={() => {
setTrace((prev) => !prev)
}}
>
</Button>
</div>
</div>
<Virtuoso
autoFocus
ref={virtuosoRef}
style={{ height: 'calc(100vh - 100px)' }}
totalCount={filteredLogs.length}
itemContent={(index) => {
const log = filteredLogs[index]
return (
<LogItem
key={log.payload + index}
time={log.time}
type={log.type}
payload={log.payload}
/>
)
}}
/>
</BasePage>
)
}

View File

@ -297,9 +297,9 @@ const Mihomo: React.FC = () => {
}}
>
<SelectItem key="silent"></SelectItem>
<SelectItem key="info"></SelectItem>
<SelectItem key="warning"></SelectItem>
<SelectItem key="error"></SelectItem>
<SelectItem key="warning"></SelectItem>
<SelectItem key="info"></SelectItem>
<SelectItem key="debug"></SelectItem>
</Select>
</SettingItem>

View File

@ -23,7 +23,7 @@ const Rules: React.FC = () => {
return (
<BasePage title="分流规则">
<div className="sticky top-[48px] z-40 backdrop-blur bg-background/40 flex p-2">
<div className="sticky top-[49px] z-40 backdrop-blur bg-background/40 flex p-2">
<Input
variant="bordered"
size="sm"