- 新增日志系统配置选项,支持日志级别、输出模式、文件大小等设置 - 添加当日日志文件下载功能,可通过Web界面直接下载 - 将console.log/error替换为结构化logger,提升日志可管理性 - 在日志页面添加自动滚动到底部功能 - 更新配置示例文件,包含完整的日志配置参数
72 lines
No EOL
2.2 KiB
JavaScript
72 lines
No EOL
2.2 KiB
JavaScript
import { existsSync } from 'fs';
|
|
import logger from '../utils/logger.js';
|
|
import { promises as fs } from 'fs';
|
|
import path from 'path';
|
|
|
|
// 用量缓存文件路径
|
|
const USAGE_CACHE_FILE = path.join(process.cwd(), 'configs', 'usage-cache.json');
|
|
|
|
/**
|
|
* 读取用量缓存文件
|
|
* @returns {Promise<Object|null>} 缓存的用量数据,如果不存在或读取失败则返回 null
|
|
*/
|
|
export async function readUsageCache() {
|
|
try {
|
|
if (existsSync(USAGE_CACHE_FILE)) {
|
|
const content = await fs.readFile(USAGE_CACHE_FILE, 'utf8');
|
|
return JSON.parse(content);
|
|
}
|
|
return null;
|
|
} catch (error) {
|
|
logger.warn('[Usage Cache] Failed to read usage cache:', error.message);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 写入用量缓存文件
|
|
* @param {Object} usageData - 用量数据
|
|
*/
|
|
export async function writeUsageCache(usageData) {
|
|
try {
|
|
await fs.writeFile(USAGE_CACHE_FILE, JSON.stringify(usageData, null, 2), 'utf8');
|
|
logger.info('[Usage Cache] Usage data cached to', USAGE_CACHE_FILE);
|
|
} catch (error) {
|
|
logger.error('[Usage Cache] Failed to write usage cache:', error.message);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 读取特定提供商类型的用量缓存
|
|
* @param {string} providerType - 提供商类型
|
|
* @returns {Promise<Object|null>} 缓存的用量数据
|
|
*/
|
|
export async function readProviderUsageCache(providerType) {
|
|
const cache = await readUsageCache();
|
|
if (cache && cache.providers && cache.providers[providerType]) {
|
|
return {
|
|
...cache.providers[providerType],
|
|
cachedAt: cache.timestamp,
|
|
fromCache: true
|
|
};
|
|
}
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* 更新特定提供商类型的用量缓存
|
|
* @param {string} providerType - 提供商类型
|
|
* @param {Object} usageData - 用量数据
|
|
*/
|
|
export async function updateProviderUsageCache(providerType, usageData) {
|
|
let cache = await readUsageCache();
|
|
if (!cache) {
|
|
cache = {
|
|
timestamp: new Date().toISOString(),
|
|
providers: {}
|
|
};
|
|
}
|
|
cache.providers[providerType] = usageData;
|
|
cache.timestamp = new Date().toISOString();
|
|
await writeUsageCache(cache);
|
|
} |