From 9b04aed8b30028e2edc812e86d4bab513f1cc0be Mon Sep 17 00:00:00 2001 From: bietiaop <1527109126@qq.com> Date: Fri, 29 Nov 2024 20:35:56 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=8E=86=E5=8F=B2=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/webui/src/api/Log.ts | 19 +++++++++++++++++++ src/webui/src/helper/config.ts | 24 +++++++++++++++++++++++- src/webui/src/router/Log.ts | 9 +++++++++ src/webui/src/router/index.ts | 3 +++ 4 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 src/webui/src/api/Log.ts create mode 100644 src/webui/src/router/Log.ts diff --git a/src/webui/src/api/Log.ts b/src/webui/src/api/Log.ts new file mode 100644 index 00000000..5b9b8c2b --- /dev/null +++ b/src/webui/src/api/Log.ts @@ -0,0 +1,19 @@ +import type { RequestHandler } from 'express'; +import { sendError, sendSuccess } from '../utils/response'; +import { WebUiConfigWrapper } from '../helper/config'; + +// 日志记录 +export const LogHandler: RequestHandler = async (req, res) => { + const filename = req.query.id as string; + if (filename.includes('..')) { + return sendError(res, 'ID不合法'); + } + const logContent = WebUiConfigWrapper.GetLogContent(filename); + return sendSuccess(res, logContent); +}; + +// 日志列表 +export const LogListHandler: RequestHandler = async (_, res) => { + const logList = WebUiConfigWrapper.GetLogsList(); + return sendSuccess(res, logList); +}; diff --git a/src/webui/src/helper/config.ts b/src/webui/src/helper/config.ts index 32ce972c..9c1d7413 100644 --- a/src/webui/src/helper/config.ts +++ b/src/webui/src/helper/config.ts @@ -1,5 +1,5 @@ import { webUiPathWrapper } from '@/webui'; -import { existsSync, readFileSync, writeFileSync } from 'node:fs'; +import { existsSync, readFileSync, writeFileSync, readdirSync } from 'node:fs'; import * as net from 'node:net'; import { resolve } from 'node:path'; @@ -131,4 +131,26 @@ export class WebUiConfigWrapper { } return defaultconfig; // 理论上这行代码到不了,到了只能返回默认配置了 } + + // 获取日志文件夹路径 + public static async GetLogsPath(): Promise { + return resolve(webUiPathWrapper.logsPath); + } + // 获取日志列表 + public static GetLogsList(): string[] { + if (existsSync(webUiPathWrapper.logsPath)) { + return readdirSync(webUiPathWrapper.logsPath) + .filter((file) => file.endsWith('.log')) + .map((file) => file.replace('.log', '')); + } + return []; + } + // 获取指定日志文件内容 + public static GetLogContent(filename: string): string { + const logPath = resolve(webUiPathWrapper.logsPath, `${filename}.log`); + if (existsSync(logPath)) { + return readFileSync(logPath, 'utf-8'); + } + return ''; + } } diff --git a/src/webui/src/router/Log.ts b/src/webui/src/router/Log.ts new file mode 100644 index 00000000..46187eeb --- /dev/null +++ b/src/webui/src/router/Log.ts @@ -0,0 +1,9 @@ +import { Router } from 'express'; +import { LogHandler, LogListHandler } from '../api/Log'; +const router = Router(); +// router:读取日志内容 +router.get('/GetLog', LogHandler); +// router:读取日志列表 +router.get('/GetLogList', LogListHandler); + +export { router as LogRouter }; diff --git a/src/webui/src/router/index.ts b/src/webui/src/router/index.ts index 419165d9..679bec57 100644 --- a/src/webui/src/router/index.ts +++ b/src/webui/src/router/index.ts @@ -10,6 +10,7 @@ import { sendSuccess } from '@webapi/utils/response'; import { QQLoginRouter } from '@webapi/router/QQLogin'; import { AuthRouter } from '@webapi/router/auth'; +import { LogRouter } from '@webapi/router/Log'; const router = Router(); @@ -26,5 +27,7 @@ router.use('/auth', AuthRouter); router.use('/QQLogin', QQLoginRouter); // router:OB11配置相关路由 router.use('/OB11Config', OB11ConfigRouter); +// router:日志相关路由 +router.use('/Log', LogRouter); export { router as ALLRouter };