返回 AiToEarn
1 /*
2 * @Author: nevin
3 * @Date: 2025-02-10 22:20:15
4 * @LastEditTime: 2025-02-22 19:21:08
5 * @LastEditors: nevin
6 * @Description: 日志组件
7 */
8 import * as path from 'path';
9 import { app, ipcMain } from 'electron';
10 import fs from 'fs';
11
12 import log from 'electron-log/main';
13
14 // 创建logs目录并配置日志路径
15 const logDirectory = path.join(app.getPath('userData'), 'logs');
16
17 log.transports.file.level = 'info';
18 log.transports.file.maxSize = 10 * 1024 * 1024; // 10MB
19 log.transports.file.resolvePathFn = () => {
20 return path.join(
21 logDirectory,
22 `${new Date().toISOString().slice(0, 10)}.log`,
23 );
24 }; // 按天生成日志
25
26 log.initialize();
27
28 console.log = log.log;
29 console.error = log.error;
30
31 export const logger = log;
32
33 export default log;
34
35 // 导出路径
36 export const logPath = logDirectory;
37
38 /**
39 * 获取近N天的文件路径列表
40 * @param days
41 * @returns
42 */
43 export function getLogFilePaths(days: number): string[] {
44 const logFiles = fs.readdirSync(logDirectory);
45 const logFilePaths = logFiles
46 .filter((file) => file.endsWith('.log'))
47 .map((file) => path.join(logDirectory, file))
48 .filter((filePath) => {
49 const fileStat = fs.statSync(filePath);
50 const fileDate = new Date(fileStat.mtime);
51 return fileDate >= new Date(Date.now() - days * 24 * 60 * 60 * 1000);
52 });
53
54 return logFilePaths;
55 }
56
57 /**
58 * 清理一周前的日志
59 */
60 export function clearOldLogs() {
61 const oneWeekAgo = Date.now() - 7 * 24 * 60 * 60 * 1000;
62 const logFiles = fs.readdirSync(logDirectory);
63 const logFilePaths = logFiles
64 .filter((file) => file.endsWith('.log'))
65 .map((file) => path.join(logDirectory, file))
66 .filter((filePath) => {
67 const fileStat = fs.statSync(filePath);
68 return fileStat.mtime.getTime() < oneWeekAgo;
69 });
70
71 logFilePaths.forEach((filePath) => {
72 fs.unlinkSync(filePath);
73 });
74 }
75
76 /**
77 * 获取日志文件列表
78 */
79 ipcMain.handle('GLOBAL_LOG_GET_FLIES', async (event, days) => {
80 const res = getLogFilePaths(days || 7);
81 return res;
82 });
83
83 lines TYPESCRIPT