Merge pull request #750 from silentrald/feat/change-log-file-behavior

[feat] change how file log names are created
This commit is contained in:
MathieuG-P
2025-01-22 17:05:14 +01:00
committed by GitHub
+57 -60
View File
@@ -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, 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<RegExp>();
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) => {
@@ -203,68 +222,46 @@ function initLogger(){
log.catchErrors();
}
function getLogFilesEntries() {
// Keep only the past week (7 days) of logs
function deleteOldLogs(): void {
let deleteLogFolders: Dirent[] = [];
try {
const logsFolder = app.getPath("logs");
let logs = readdirSync(logsFolder, { withFileTypes: 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 logs.map(file => {
const filePath = path.join(logsFolder, 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 [];
const filterDate = convertDateToDateString(
new Date(Date.now() - 7 * 24 * 60 * 60 * 1000) // 7 days
);
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;
}
}
// keep only the last 5 logs
function deleteOldLogs(): void{
try {
let logs = getLogFilesEntries();
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);
}
}
// Temporary function to delete logs before 2024-07-31
function deleteOlestLogs(): 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());
logs.forEach(file => {
for (const folder of deleteLogFolders) {
const folderPath = path.join(folder.parentPath, folder.name);
try {
unlinkSync(file.path);
log.info(`Deleted log file: ${file.path}`);
} catch (err) {
log.error(`Error deleting file ${file.path}:`, err);
rmSync(folderPath, { recursive: true, force: true });
log.info("Deleted log folder:", folderPath);
} catch (error) {
log.error("Error deleting folder:", folderPath, error);
}
});
}
}
// Obsolete behavior, delete log files that are on the parent log folder
function deleteOldestLogs(): void {
const logsFolder = app.getPath("logs");
const logs = readdirSync(logsFolder, { withFileTypes: true })
.filter(file => file.isFile() && path.extname(file.name) === ".log");
for (const file of logs) {
const filepath = path.join(file.parentPath, file.name);
try {
unlinkSync(filepath);
log.info("Deleted log file:", filepath);
} catch (error) {
log.error("Error deleting file:", filepath, error);
}
}
}
export function addFilterStringLog(filter: string): void {