Files

85 lines
2.4 KiB
JavaScript
Raw Permalink Normal View History

2026-03-17 14:36:31 +08:00
const fs = require('fs');
const path = require('path');
/**
* 设置应用日志系统
* @param {Object} app Electron app 对象
* @returns {string} 日志文件路径
*/
function setupLogging(app) {
const logDir = path.join(app.getPath('userData'), 'logs');
if (!fs.existsSync(logDir)) {
fs.mkdirSync(logDir, { recursive: true });
}
const logFilePath = path.join(logDir, `app-${new Date().toISOString().slice(0, 10)}.log`);
// 创建自定义日志函数
global.appLog = (message, level = 'info') => {
const timestamp = new Date().toISOString();
const logEntry = `[${timestamp}] [${level.toUpperCase()}] ${message}\n`;
// 同时输出到控制台和日志文件
console.log(message);
fs.appendFileSync(logFilePath, logEntry);
};
// 捕获全局未处理异常并记录
process.on('uncaughtException', error => {
global.appLog(`未捕获的异常: ${error.stack || error}`, 'error');
});
return logFilePath;
}
/**
* 设置 IPC 日志处理程序
* @param {Object} ipcMain IPC 主进程对象
* @param {Object} app Electron app 对象
* @param {boolean} isDev 是否为开发环境
*/
function setupIpcLogging(ipcMain, app, isDev) {
ipcMain.on('log', (event, { level, message }) => {
const timestamp = new Date().toISOString();
const logEntry = `[${timestamp}] [${level.toUpperCase()}] ${message}\n`;
// 只在客户端环境下写入文件
if (!isDev || true) {
const logsDir = path.join(app.getPath('userData'), 'logs');
if (!fs.existsSync(logsDir)) {
fs.mkdirSync(logsDir, { recursive: true });
}
const logFile = path.join(logsDir, `${new Date().toISOString().split('T')[0]}.log`);
fs.appendFileSync(logFile, logEntry);
}
// 同时输出到控制台
console[level](message);
});
}
/**
* 清理日志文件
* @param {Object} app Electron app 对象
* @returns {Promise<void>}
*/
async function clearLogs(app) {
const logsDir = path.join(app.getPath('userData'), 'logs');
if (fs.existsSync(logsDir)) {
// 读取目录下所有文件
const files = await fs.promises.readdir(logsDir);
// 删除所有文件
for (const file of files) {
const filePath = path.join(logsDir, file);
await fs.promises.unlink(filePath);
global.appLog(`已删除日志文件: ${filePath}`);
}
}
}
module.exports = {
setupLogging,
setupIpcLogging,
clearLogs
};