Antigravity2api / src /admin /log_manager.js
link0518
重构
b88ce1b
import fs from 'fs/promises';
import path from 'path';
const LOGS_FILE = path.join(process.cwd(), 'data', 'app_logs.json');
const MAX_LOGS = 200; // 最多保存 200 条日志(降低内存使用)
// 内存缓存,避免频繁读取文件
let logsCache = null;
let lastCacheTime = 0;
const CACHE_DURATION = 30000; // 缓存30秒
// 确保数据目录存在
async function ensureDataDir() {
const dataDir = path.dirname(LOGS_FILE);
try {
await fs.access(dataDir);
} catch {
await fs.mkdir(dataDir, { recursive: true });
}
}
// 加载日志(带缓存)
export async function loadLogs() {
const now = Date.now();
// 如果缓存有效,直接返回缓存
if (logsCache && (now - lastCacheTime) < CACHE_DURATION) {
return logsCache;
}
await ensureDataDir();
try {
const data = await fs.readFile(LOGS_FILE, 'utf-8');
logsCache = JSON.parse(data);
lastCacheTime = now;
return logsCache;
} catch (error) {
if (error.code === 'ENOENT') {
logsCache = [];
lastCacheTime = now;
return [];
}
throw error;
}
}
// 保存日志
async function saveLogs(logs) {
await ensureDataDir();
// 只保留最新的日志
const recentLogs = logs.slice(-MAX_LOGS);
await fs.writeFile(LOGS_FILE, JSON.stringify(recentLogs, null, 2), 'utf-8');
// 更新缓存
logsCache = recentLogs;
lastCacheTime = Date.now();
}
// 添加日志
export async function addLog(level, message) {
const logs = await loadLogs();
logs.push({
timestamp: new Date().toISOString(),
level,
message
});
await saveLogs(logs);
}
// 清空日志
export async function clearLogs() {
await saveLogs([]);
}
// 获取最近的日志
export async function getRecentLogs(limit = 100) {
const logs = await loadLogs();
return logs.slice(-limit).reverse();
}