refactor: 添加回log功能~这次好用了~
This commit is contained in:
@@ -13,6 +13,7 @@ import {
|
||||
stopBackend,
|
||||
} from './services/pythonService'
|
||||
import { setMainWindow as setGitMainWindow, downloadGit, cloneBackend } from './services/gitService'
|
||||
import { setupLogger, log, getLogPath, cleanOldLogs } from './services/logService'
|
||||
|
||||
// 检查是否以管理员权限运行
|
||||
function isRunningAsAdmin(): boolean {
|
||||
@@ -60,6 +61,8 @@ function restartAsAdmin(): void {
|
||||
let mainWindow: BrowserWindow | null = null
|
||||
|
||||
function createWindow() {
|
||||
log.info('开始创建主窗口')
|
||||
|
||||
mainWindow = new BrowserWindow({
|
||||
width: 1600,
|
||||
height: 1000,
|
||||
@@ -77,13 +80,16 @@ function createWindow() {
|
||||
mainWindow.setMenuBarVisibility(false)
|
||||
const devServer = process.env.VITE_DEV_SERVER_URL
|
||||
if (devServer) {
|
||||
log.info(`加载开发服务器: ${devServer}`)
|
||||
mainWindow.loadURL(devServer)
|
||||
} else {
|
||||
const indexHtmlPath = path.join(app.getAppPath(), 'dist', 'index.html')
|
||||
log.info(`加载生产环境页面: ${indexHtmlPath}`)
|
||||
mainWindow.loadFile(indexHtmlPath)
|
||||
}
|
||||
|
||||
mainWindow.on('closed', () => {
|
||||
log.info('主窗口已关闭')
|
||||
mainWindow = null
|
||||
})
|
||||
|
||||
@@ -92,6 +98,7 @@ function createWindow() {
|
||||
setDownloadMainWindow(mainWindow)
|
||||
setPythonMainWindow(mainWindow)
|
||||
setGitMainWindow(mainWindow)
|
||||
log.info('主窗口创建完成,服务引用已设置')
|
||||
}
|
||||
}
|
||||
|
||||
@@ -240,6 +247,62 @@ ipcMain.handle('reset-config', async () => {
|
||||
})
|
||||
|
||||
// 日志文件操作
|
||||
ipcMain.handle('get-log-path', async () => {
|
||||
try {
|
||||
return getLogPath()
|
||||
} catch (error) {
|
||||
log.error('获取日志路径失败:', error)
|
||||
throw error
|
||||
}
|
||||
})
|
||||
|
||||
ipcMain.handle('get-logs', async (event, lines?: number) => {
|
||||
try {
|
||||
const logFilePath = getLogPath()
|
||||
|
||||
if (!fs.existsSync(logFilePath)) {
|
||||
return ''
|
||||
}
|
||||
|
||||
const logs = fs.readFileSync(logFilePath, 'utf8')
|
||||
|
||||
if (lines && lines > 0) {
|
||||
const logLines = logs.split('\n')
|
||||
return logLines.slice(-lines).join('\n')
|
||||
}
|
||||
|
||||
return logs
|
||||
} catch (error) {
|
||||
log.error('读取日志文件失败:', error)
|
||||
throw error
|
||||
}
|
||||
})
|
||||
|
||||
ipcMain.handle('clear-logs', async () => {
|
||||
try {
|
||||
const logFilePath = getLogPath()
|
||||
|
||||
if (fs.existsSync(logFilePath)) {
|
||||
fs.writeFileSync(logFilePath, '', 'utf8')
|
||||
log.info('日志文件已清空')
|
||||
}
|
||||
} catch (error) {
|
||||
log.error('清空日志文件失败:', error)
|
||||
throw error
|
||||
}
|
||||
})
|
||||
|
||||
ipcMain.handle('clean-old-logs', async (event, daysToKeep = 7) => {
|
||||
try {
|
||||
cleanOldLogs(daysToKeep)
|
||||
log.info(`已清理${daysToKeep}天前的旧日志文件`)
|
||||
} catch (error) {
|
||||
log.error('清理旧日志文件失败:', error)
|
||||
throw error
|
||||
}
|
||||
})
|
||||
|
||||
// 保留原有的日志操作方法以兼容现有代码
|
||||
ipcMain.handle('save-logs-to-file', async (event, logs: string) => {
|
||||
try {
|
||||
const appRoot = getAppRoot()
|
||||
@@ -252,9 +315,9 @@ ipcMain.handle('save-logs-to-file', async (event, logs: string) => {
|
||||
|
||||
const logFilePath = path.join(logsDir, 'app.log')
|
||||
fs.writeFileSync(logFilePath, logs, 'utf8')
|
||||
console.log(`日志已保存到: ${logFilePath}`)
|
||||
log.info(`日志已保存到: ${logFilePath}`)
|
||||
} catch (error) {
|
||||
console.error('保存日志文件失败:', error)
|
||||
log.error('保存日志文件失败:', error)
|
||||
throw error
|
||||
}
|
||||
})
|
||||
@@ -266,13 +329,13 @@ ipcMain.handle('load-logs-from-file', async () => {
|
||||
|
||||
if (fs.existsSync(logFilePath)) {
|
||||
const logs = fs.readFileSync(logFilePath, 'utf8')
|
||||
console.log(`从文件加载日志: ${logFilePath}`)
|
||||
log.info(`从文件加载日志: ${logFilePath}`)
|
||||
return logs
|
||||
}
|
||||
|
||||
return null
|
||||
} catch (error) {
|
||||
console.error('加载日志文件失败:', error)
|
||||
log.error('加载日志文件失败:', error)
|
||||
return null
|
||||
}
|
||||
})
|
||||
@@ -305,22 +368,42 @@ app.on('second-instance', () => {
|
||||
app.on('before-quit', async event => {
|
||||
// 只处理一次,避免多重触发
|
||||
event.preventDefault()
|
||||
log.info('应用准备退出')
|
||||
try {
|
||||
await stopBackend()
|
||||
log.info('后端服务已停止')
|
||||
} catch (e) {
|
||||
log.error('停止后端时出错:', e)
|
||||
console.error('停止后端时出错:', e)
|
||||
} finally {
|
||||
log.info('应用退出')
|
||||
app.exit(0)
|
||||
}
|
||||
})
|
||||
|
||||
app.whenReady().then(() => {
|
||||
// 初始化日志系统
|
||||
setupLogger()
|
||||
|
||||
// 清理7天前的旧日志
|
||||
cleanOldLogs(7)
|
||||
|
||||
log.info('应用启动')
|
||||
log.info(`应用版本: ${app.getVersion()}`)
|
||||
log.info(`Electron版本: ${process.versions.electron}`)
|
||||
log.info(`Node版本: ${process.versions.node}`)
|
||||
log.info(`平台: ${process.platform}`)
|
||||
|
||||
// 检查管理员权限
|
||||
if (!isRunningAsAdmin()) {
|
||||
log.warn('应用未以管理员权限运行')
|
||||
console.log('应用未以管理员权限运行')
|
||||
// 在生产环境中,可以选择是否强制要求管理员权限
|
||||
// 这里先创建窗口,让用户选择是否重新启动
|
||||
} else {
|
||||
log.info('应用以管理员权限运行')
|
||||
}
|
||||
|
||||
createWindow()
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user