feat: 实时日志 (#584)

* feat: 历史日志

* feat: 实时日志

* fix: EventEmitter实现事件监听
This commit is contained in:
bietiaop
2024-12-01 09:31:47 +08:00
committed by GitHub
parent 040b5535f3
commit d13db5e8eb
3 changed files with 75 additions and 26 deletions

View File

@@ -1,6 +1,7 @@
import type { RequestHandler } from 'express';
import { sendError, sendSuccess } from '../utils/response';
import { WebUiConfigWrapper } from '../helper/config';
import { logSubscription } from '@/common/log';
// 日志记录
export const LogHandler: RequestHandler = async (req, res) => {
@@ -17,3 +18,17 @@ export const LogListHandler: RequestHandler = async (_, res) => {
const logList = WebUiConfigWrapper.GetLogsList();
return sendSuccess(res, logList);
};
// 实时日志SSE
export const LogRealTimeHandler: RequestHandler = async (req, res) => {
const listener = (log: string) => {
try {
res.write(log + '\n');
} catch (error) {
// ignore
}
};
logSubscription.subscribe(listener);
req.on('close', () => {
logSubscription.unsubscribe(listener);
});
};

View File

@@ -1,9 +1,13 @@
import { Router } from 'express';
import { LogHandler, LogListHandler } from '../api/Log';
import { LogHandler, LogListHandler, LogRealTimeHandler } from '../api/Log';
const router = Router();
// router:读取日志内容
router.get('/GetLog', LogHandler);
// router:读取日志列表
router.get('/GetLogList', LogListHandler);
// router:实时日志
router.get('/GetLogRealTime', LogRealTimeHandler);
export { router as LogRouter };