From 13984f886fba0c68878d8c1d69d40e395f1a9916 Mon Sep 17 00:00:00 2001 From: silentrald Date: Tue, 21 Jan 2025 11:53:48 +0800 Subject: [PATCH 1/3] [feat] change how file log names are created --- src/main/main.ts | 78 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 53 insertions(+), 25 deletions(-) diff --git a/src/main/main.ts b/src/main/main.ts index 371ca6bc..11f22581 100644 --- a/src/main/main.ts +++ b/src/main/main.ts @@ -23,7 +23,7 @@ import { LivShortcut } from "./services/liv/liv-shortcut.service"; import { SteamLauncherService } from "./services/bs-launcher/steam-launcher.service"; import { FileAssociationService } from "./services/file-association.service"; import { SongDetailsCacheService } from "./services/additional-content/maps/song-details-cache.service"; -import { readdirSync, statSync, unlinkSync } from "fs-extra"; +import { Dirent, readdirSync, rmSync, statSync, unlinkSync } from "fs-extra"; import { StaticConfigurationService } from "./services/static-configuration.service"; import { configureProxy } from './helpers/proxy.helpers'; @@ -37,7 +37,7 @@ export const filterPatterns = new Set(); filterPatterns.add(/(FRL|OC)\S{10,}/g); initLogger(); -deleteOlestLogs(); +deleteOldestLogs(); deleteOldLogs(); staticConfig.take("disable-hadware-acceleration", disabled => { @@ -156,11 +156,30 @@ if (!gotTheLock) { }).catch(log.error); } +function convertDateToDateString(date: Date): string { + const month = (date.getMonth() + 1).toString().padStart(2, "0"); + const day = date.getDate().toString().padStart(2, "0"); + return `${date.getFullYear()}-${month}-${day}`; +} + function initLogger(){ log.transports.file.level = "info"; + + let filepath = ""; + let currentDateString = convertDateToDateString(new Date()); log.transports.file.resolvePath = () => { const now = new Date(); - return path.join(app.getPath("logs"), `${now.getFullYear()}-${now.getMonth() + 1}-${now.getDate()}-v${app.getVersion()}.log`); + const nowString = convertDateToDateString(now); + if (filepath && nowString === currentDateString) { + return filepath; + } + + filepath = path.join( + app.getPath("logs"), nowString, + `${now.getTime()}-v${app.getVersion()}.log` + ); + currentDateString = nowString; + return filepath; }; log.hooks.push((message) => { @@ -206,18 +225,19 @@ function initLogger(){ function getLogFilesEntries() { try { const logsFolder = app.getPath("logs"); - let logs = readdirSync(logsFolder, { withFileTypes: true }); - + let logs = readdirSync(logsFolder, { + withFileTypes: true, + recursive: true + }); logs = logs.filter(file => file.isFile() && path.extname(file.name) === ".log"); logs.sort((a, b) => { - const aStat = statSync(path.join(logsFolder, a.name)); - const bStat = statSync(path.join(logsFolder, b.name)); - return bStat.mtime.getTime() - aStat.mtime.getTime(); + return path.basename(b.parentPath).localeCompare(path.basename(a.parentPath)) + || b.name.localeCompare(a.name); }); return logs.map(file => { - const filePath = path.join(logsFolder, file.name); + const filePath = path.join(file.parentPath, file.name); const stat = statSync(filePath); return { path: filePath, @@ -231,28 +251,36 @@ function getLogFilesEntries() { } } -// keep only the last 5 logs -function deleteOldLogs(): void{ +// Keep only the past week (7 days) of logs +function deleteOldLogs(): void { + const deleteLogFolders: Dirent[] = []; try { - let logs = getLogFilesEntries(); + const filterDate = convertDateToDateString( + new Date(Date.now() - 7 * 24 * 60 * 60 * 1000) // 7 days + ); + deleteLogFolders.push.apply([], + readdirSync(app.getPath("logs"), { withFileTypes: true }) + .filter(folder => folder.isDirectory() && folder.name <= filterDate) + ); + } catch (error) { + log.error("Error while deleting old logs:", error); + return; + } - logs = logs.slice(5); - - logs.forEach(file => { - try { - unlinkSync(file.path); - log.info(`Deleted log file: ${file.path}`); - } catch (err) { - log.error(`Error deleting file ${file.path}:`, err); - } - }); - } catch (err) { - log.error("Error while deleting old logs:", err); + for (const folder of deleteLogFolders) { + const folderPath = path.join(folder.parentPath, folder.name); + try { + rmSync(folderPath, { recursive: true, force: true }); + log.info("Deleted log folder:", folderPath); + } catch (error) { + log.error("Error deleting folder", folderPath, error); + } } } +// NOTE: Change this date to when the PR is merged // Temporary function to delete logs before 2024-07-31 -function deleteOlestLogs(): void{ +function deleteOldestLogs(): void { // delete all logs before 2024-07-31 const date = new Date(2024, 6, 31); // month is 0-based const logs = getLogFilesEntries().filter(file => file.stats.mtime.getTime() < date.getTime()); From ec0ae76d707e3ea07bfb7633045094ebfe112877 Mon Sep 17 00:00:00 2001 From: silentrald Date: Tue, 21 Jan 2025 12:19:05 +0800 Subject: [PATCH 2/3] [feat] delete obsolete log files from previous handling --- src/main/main.ts | 55 ++++++++++++------------------------------------ 1 file changed, 13 insertions(+), 42 deletions(-) diff --git a/src/main/main.ts b/src/main/main.ts index 11f22581..e1c57273 100644 --- a/src/main/main.ts +++ b/src/main/main.ts @@ -23,7 +23,7 @@ import { LivShortcut } from "./services/liv/liv-shortcut.service"; import { SteamLauncherService } from "./services/bs-launcher/steam-launcher.service"; import { FileAssociationService } from "./services/file-association.service"; import { SongDetailsCacheService } from "./services/additional-content/maps/song-details-cache.service"; -import { Dirent, readdirSync, rmSync, statSync, unlinkSync } from "fs-extra"; +import { Dirent, readdirSync, rmSync, unlinkSync } from "fs-extra"; import { StaticConfigurationService } from "./services/static-configuration.service"; import { configureProxy } from './helpers/proxy.helpers'; @@ -222,35 +222,6 @@ function initLogger(){ log.catchErrors(); } -function getLogFilesEntries() { - try { - const logsFolder = app.getPath("logs"); - let logs = readdirSync(logsFolder, { - withFileTypes: true, - recursive: true - }); - logs = logs.filter(file => file.isFile() && path.extname(file.name) === ".log"); - - logs.sort((a, b) => { - return path.basename(b.parentPath).localeCompare(path.basename(a.parentPath)) - || b.name.localeCompare(a.name); - }); - - return logs.map(file => { - const filePath = path.join(file.parentPath, file.name); - const stat = statSync(filePath); - return { - path: filePath, - name: file.name, - stats: stat - }; - }); - } catch (err) { - log.error('Error while retrieving log files entries:', err); - return []; - } -} - // Keep only the past week (7 days) of logs function deleteOldLogs(): void { const deleteLogFolders: Dirent[] = []; @@ -273,26 +244,26 @@ function deleteOldLogs(): void { rmSync(folderPath, { recursive: true, force: true }); log.info("Deleted log folder:", folderPath); } catch (error) { - log.error("Error deleting folder", folderPath, error); + log.error("Error deleting folder:", folderPath, error); } } } -// NOTE: Change this date to when the PR is merged -// Temporary function to delete logs before 2024-07-31 +// Obsolete behavior, delete log files that are on the parent log folder function deleteOldestLogs(): void { - // delete all logs before 2024-07-31 - const date = new Date(2024, 6, 31); // month is 0-based - const logs = getLogFilesEntries().filter(file => file.stats.mtime.getTime() < date.getTime()); + const logsFolder = app.getPath("logs"); + const logs = readdirSync(logsFolder, { withFileTypes: true }) + .filter(file => file.isFile() && path.extname(file.name) === ".log"); - logs.forEach(file => { + for (const file of logs) { + const filepath = path.join(file.parentPath, file.name); try { - unlinkSync(file.path); - log.info(`Deleted log file: ${file.path}`); - } catch (err) { - log.error(`Error deleting file ${file.path}:`, err); + unlinkSync(filepath); + log.info("Deleted log file:", filepath); + } catch (error) { + log.error("Error deleting file:", filepath, error); } - }); + } } export function addFilterStringLog(filter: string): void { From 93bcd358cb43d5b19aedff3c791c6cf72ba7c349 Mon Sep 17 00:00:00 2001 From: silentrald Date: Wed, 22 Jan 2025 08:35:47 +0800 Subject: [PATCH 3/3] [feat] just set the deleteLogFolders than appending the new list --- src/main/main.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/main/main.ts b/src/main/main.ts index e1c57273..ab12b37c 100644 --- a/src/main/main.ts +++ b/src/main/main.ts @@ -224,15 +224,13 @@ function initLogger(){ // Keep only the past week (7 days) of logs function deleteOldLogs(): void { - const deleteLogFolders: Dirent[] = []; + let deleteLogFolders: Dirent[] = []; try { const filterDate = convertDateToDateString( new Date(Date.now() - 7 * 24 * 60 * 60 * 1000) // 7 days ); - deleteLogFolders.push.apply([], - readdirSync(app.getPath("logs"), { withFileTypes: true }) - .filter(folder => folder.isDirectory() && folder.name <= filterDate) - ); + deleteLogFolders = readdirSync(app.getPath("logs"), { withFileTypes: true }) + .filter(folder => folder.isDirectory() && folder.name <= filterDate); } catch (error) { log.error("Error while deleting old logs:", error); return;