74 lines
1.9 KiB
JavaScript
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
|
|
};
|