Files
lyroc/electron-app/modules/logger.js
2025-05-27 14:16:48 +08:00

74 lines
1.9 KiB
JavaScript

/**
* 日志记录模块
* 负责应用日志记录和输出重定向
*/
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
};