mirror of
https://github.com/HugoAura/Seewo-HugoAura.git
synced 2026-06-24 01:44:28 +08:00
[Feat] Log file auto cleanup (#15) & Improve logger experience
Co-authored-by: TianMiao <tianmiao.work@foxmail.com>
This commit is contained in:
@@ -64,9 +64,12 @@ const buildIpcMain = (electron) => {
|
|||||||
} else {
|
} else {
|
||||||
const isWindowValid = global.__HUGO_AURA__.hookedWindows.has(windowKey);
|
const isWindowValid = global.__HUGO_AURA__.hookedWindows.has(windowKey);
|
||||||
if (!isWindowValid) {
|
if (!isWindowValid) {
|
||||||
throw new Error(
|
console.warn(
|
||||||
`[HugoAura / Main / IPC / ERROR] Unknown windowKey: ${windowKey}`
|
`[HugoAura / Main / IPC / WARN] Unknown windowKey: ${windowKey}, window may not have started yet.`
|
||||||
);
|
);
|
||||||
|
return {
|
||||||
|
success: false,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
sendDataToWebContents(windowKey, channel, data);
|
sendDataToWebContents(windowKey, channel, data);
|
||||||
|
|||||||
111
src/aura/init/main/logger.js
Normal file
111
src/aura/init/main/logger.js
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
const path = require("path");
|
||||||
|
const fs = require("fs");
|
||||||
|
const os = require("os");
|
||||||
|
const util = require("util");
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {import("../aura/types/main/core").WindowName} windowName
|
||||||
|
*/
|
||||||
|
const initLogger = (windowName) => {
|
||||||
|
const logDir = path.join(os.homedir(), "Documents", "HugoAura", "logs");
|
||||||
|
if (!fs.existsSync(logDir)) {
|
||||||
|
fs.mkdirSync(logDir, { recursive: true });
|
||||||
|
}
|
||||||
|
|
||||||
|
cleanupOldLogs(logDir);
|
||||||
|
const logFile = getLogFileName(logDir);
|
||||||
|
const logStream = fs.createWriteStream(logFile, { flags: "a" });
|
||||||
|
|
||||||
|
const timestamp = new Date().toISOString();
|
||||||
|
const startupMsg = `\n=== [${timestamp}] HugoAura 窗口启动: ${windowName} ===\n\n`;
|
||||||
|
logStream.write(startupMsg);
|
||||||
|
|
||||||
|
const originalConsole = {
|
||||||
|
log: console.log,
|
||||||
|
error: console.error,
|
||||||
|
warn: console.warn,
|
||||||
|
info: console.info,
|
||||||
|
debug: console.debug,
|
||||||
|
};
|
||||||
|
|
||||||
|
console.log = function (...args) {
|
||||||
|
const msg = util.format(`[LOG] <${windowName}>`, ...args) + "\n";
|
||||||
|
logStream.write(msg);
|
||||||
|
originalConsole.log.apply(console, args);
|
||||||
|
};
|
||||||
|
|
||||||
|
console.error = function (...args) {
|
||||||
|
const msg = util.format(`[ERROR] <${windowName}>`, ...args) + "\n";
|
||||||
|
logStream.write(msg);
|
||||||
|
originalConsole.error.apply(console, args);
|
||||||
|
};
|
||||||
|
|
||||||
|
console.warn = function (...args) {
|
||||||
|
const msg = util.format(`[WARN] <${windowName}>`, ...args) + "\n";
|
||||||
|
logStream.write(msg);
|
||||||
|
originalConsole.warn.apply(console, args);
|
||||||
|
};
|
||||||
|
|
||||||
|
console.info = function (...args) {
|
||||||
|
const msg = util.format(`[INFO] <${windowName}>`, ...args) + "\n";
|
||||||
|
logStream.write(msg);
|
||||||
|
originalConsole.info.apply(console, args);
|
||||||
|
};
|
||||||
|
|
||||||
|
console.debug = function (...args) {
|
||||||
|
if (!process.argv.includes("--aura-debug")) return;
|
||||||
|
const msg = util.format(`[DEBUG] <${windowName}>`, ...args) + "\n";
|
||||||
|
logStream.write(msg);
|
||||||
|
originalConsole.debug.apply(console, args);
|
||||||
|
};
|
||||||
|
|
||||||
|
process.on("uncaughtException", (err) => {
|
||||||
|
console.error("[CRITICAL] UNCAUGHT EXCEPTION:", err);
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log(
|
||||||
|
"[HugoAura / Logger] Logger initialized. Log file:",
|
||||||
|
logFile
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const cleanupOldLogs = (logDir) => {
|
||||||
|
try {
|
||||||
|
const files = fs.readdirSync(logDir);
|
||||||
|
const now = new Date();
|
||||||
|
const sevenDaysAgo = new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000);
|
||||||
|
|
||||||
|
files.forEach((file) => {
|
||||||
|
if (file.endsWith(".log")) {
|
||||||
|
const filePath = path.join(logDir, file);
|
||||||
|
const stats = fs.statSync(filePath);
|
||||||
|
|
||||||
|
// 如果文件创建时间超过 30 天, 则删除
|
||||||
|
if (stats.birthtime < sevenDaysAgo) {
|
||||||
|
fs.unlinkSync(filePath);
|
||||||
|
console.log(
|
||||||
|
`[HugoAura / Logger / Cleanup] Cleaned log file: ${file}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
console.error("[HugoAura / Logger / Cleanup] Unexpected error occurred cleaning log file:", error);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成每日 Log 文件路径
|
||||||
|
* @param {string} logDir 日志目录路径
|
||||||
|
* @param {string} _windowName 窗口名称 (暂时无用)
|
||||||
|
* @returns {string} 日志文件路径
|
||||||
|
*/
|
||||||
|
const getLogFileName = (logDir, _windowName) => {
|
||||||
|
const today = new Date();
|
||||||
|
const dateStr = today.toISOString().split("T")[0]; // YYYY-MM-DD 格式
|
||||||
|
const logFileName = `HugoAura-SSA-${dateStr}.log`;
|
||||||
|
return path.join(logDir, logFileName);
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = { initLogger };
|
||||||
@@ -30,11 +30,6 @@ if (!global.__HUGO_AURA_CONFIG__) {
|
|||||||
global.__HUGO_AURA_CONFIG__ = {};
|
global.__HUGO_AURA_CONFIG__ = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
const fs = require("fs");
|
|
||||||
const util = require("util");
|
|
||||||
const path = require("path");
|
|
||||||
const os = require("os");
|
|
||||||
|
|
||||||
const MainProcessHooksManager = require("../aura/init/main/windowHooksManager");
|
const MainProcessHooksManager = require("../aura/init/main/windowHooksManager");
|
||||||
const RendererHooksManager = require("../aura/init/rendererHook/uiHooksManager");
|
const RendererHooksManager = require("../aura/init/rendererHook/uiHooksManager");
|
||||||
const EventBus = require("../aura/utils/eventBus");
|
const EventBus = require("../aura/utils/eventBus");
|
||||||
@@ -42,70 +37,7 @@ const NetworkHook = require("../aura/init/rendererHook/networkHook");
|
|||||||
const ConfigManager = require("../aura/init/shared/configManager");
|
const ConfigManager = require("../aura/init/shared/configManager");
|
||||||
const { buildIpcMain } = require("../aura/init/main/ipcHandler");
|
const { buildIpcMain } = require("../aura/init/main/ipcHandler");
|
||||||
|
|
||||||
/**
|
const { initLogger } = require("../aura/init/main/logger");
|
||||||
*
|
|
||||||
* @param {import("../aura/types/main/core").WindowName} windowName
|
|
||||||
*/
|
|
||||||
const initLogger = (windowName) => {
|
|
||||||
const logDir = path.join(os.homedir(), "Documents", "HugoAura", "logs");
|
|
||||||
if (!fs.existsSync(logDir)) {
|
|
||||||
fs.mkdirSync(logDir, { recursive: true });
|
|
||||||
}
|
|
||||||
|
|
||||||
const logFile = path.join(
|
|
||||||
logDir,
|
|
||||||
`main-${windowName}-${new Date().toISOString().replace(/:/g, "-")}.log`
|
|
||||||
);
|
|
||||||
const logStream = fs.createWriteStream(logFile, { flags: "a" });
|
|
||||||
|
|
||||||
const originalConsole = {
|
|
||||||
log: console.log,
|
|
||||||
error: console.error,
|
|
||||||
warn: console.warn,
|
|
||||||
info: console.info,
|
|
||||||
debug: console.debug,
|
|
||||||
};
|
|
||||||
|
|
||||||
console.log = function (...args) {
|
|
||||||
const msg = util.format("[LOG] ", ...args) + "\n";
|
|
||||||
logStream.write(msg);
|
|
||||||
originalConsole.log.apply(console, args);
|
|
||||||
};
|
|
||||||
|
|
||||||
console.error = function (...args) {
|
|
||||||
const msg = util.format("[ERROR] ", ...args) + "\n";
|
|
||||||
logStream.write(msg);
|
|
||||||
originalConsole.error.apply(console, args);
|
|
||||||
};
|
|
||||||
|
|
||||||
console.warn = function (...args) {
|
|
||||||
const msg = util.format("[WARN] ", ...args) + "\n";
|
|
||||||
logStream.write(msg);
|
|
||||||
originalConsole.warn.apply(console, args);
|
|
||||||
};
|
|
||||||
|
|
||||||
console.info = function (...args) {
|
|
||||||
const msg = util.format("[INFO] ", ...args) + "\n";
|
|
||||||
logStream.write(msg);
|
|
||||||
originalConsole.info.apply(console, args);
|
|
||||||
};
|
|
||||||
|
|
||||||
console.debug = function (...args) {
|
|
||||||
if (!process.argv.includes("--aura-debug")) return;
|
|
||||||
const msg = util.format("[DEBUG] ", ...args) + "\n";
|
|
||||||
logStream.write(msg);
|
|
||||||
originalConsole.debug.apply(console, args);
|
|
||||||
};
|
|
||||||
|
|
||||||
process.on("uncaughtException", (err) => {
|
|
||||||
console.error("UNCAUGHT EXCEPTION:", err);
|
|
||||||
});
|
|
||||||
|
|
||||||
console.log(
|
|
||||||
"[HugoAura / Init / Logger] Logger initialized. Log file:",
|
|
||||||
logFile
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user