/** * 日志记录模块 * 负责应用日志记录和输出重定向 */ const path = require('path'); const fs = require('fs'); /** * 设置应用日志系统 * @param {string} userDataPath 用户数据目录路径 * @returns {string} 日志文件路径 */ function setupLogging(userDataPath) { const logPath = path.join( userDataPath, 'logs', `app-${new Date().toISOString().replace(/:/g, '-')}.log` ); // 确保日志目录存在 const logDir = path.dirname(logPath); if (!fs.existsSync(logDir)) { fs.mkdirSync(logDir, { recursive: true }); } console.log(`日志文件将保存在: ${logPath}`); // 创建日志文件写入流 const logStream = fs.createWriteStream(logPath, { flags: 'a' }); // 重定向console输出到文件 const originalConsoleLog = console.log; const originalConsoleError = console.error; console.log = function(...args) { const message = args.map(arg => typeof arg === 'object' ? JSON.stringify(arg) : arg ).join(' '); const timestamp = new Date().toISOString(); const logMessage = `[${timestamp}] [INFO] ${message}\n`; logStream.write(logMessage); originalConsoleLog.apply(console, args); }; console.error = function(...args) { const message = args.map(arg => typeof arg === 'object' ? JSON.stringify(arg) : arg ).join(' '); const timestamp = new Date().toISOString(); const logMessage = `[${timestamp}] [ERROR] ${message}\n`; logStream.write(logMessage); originalConsoleError.apply(console, args); }; // 记录未捕获的异常 process.on('uncaughtException', (error) => { console.error('未捕获的异常:', error); }); process.on('unhandledRejection', (reason, promise) => { console.error('未处理的Promise拒绝:', reason); }); return logPath; } module.exports = { setupLogging };