/* This file is part of Freedom Loader. Copyright (C) 2025 MasterAcnolo Freedom Loader is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License. Freedom Loader is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ const { createLogger, format, transports } = require("winston"); const DailyRotateFile = require("winston-daily-rotate-file"); const fs = require("fs"); // Pour vérifier/créer le dossier de logs const path = require("path"); // Pour gérer proprement les chemins const os = require("os"); // Pour gérer les chemins aussi // Définition du dossier où seront stockés les logs // const logDir = path.join(__dirname, "../logs"); Désactivé parce que cela requiert d'exec en admin mode. Donc pas pratique pour les gens let logDir; if (process.platform === "win32") { logDir = path.join(os.homedir(), "AppData", "Local", "FreedomLoader", "logs"); } else { logDir = path.join(os.homedir(), ".freedomloader", "logs"); } // Création du dossier logs s’il n’existe pas encore //if (!fs.existsSync(logDir)) fs.mkdirSync(logDir); OBSOLETE fs.mkdirSync(logDir, { recursive: true }); // Evite les erreurs // Fonction utilitaire pour générer une ligne indiquant le début d’une session de logs function getSessionStartLine() { const now = new Date().toISOString(); return `--- Démarrage de la session : ${now} ---`; } // Fonction utilitaire pour générer une ligne indiquant la fin d’une session de logs function getSessionEndLine() { const now = new Date().toISOString(); return `--- Fin de la session : ${now} ---`; } // Configuration principale de Winston // - Niveau minimum d’écriture : info (enregistre info, warn, error, etc.) // - Formatage des logs avec timestamp lisible et format personnalisé // - Transports : écriture dans fichier journalier + console avec couleurs const logger = createLogger({ level: "info", format: format.combine( format.timestamp({ format: "YYYY-MM-DD HH:mm:ss" }), format.printf(({ timestamp, level, message }) => `${timestamp} | ${level.toUpperCase()} | ${message}` ) ), transports: [ // Rotation quotidienne des fichiers de logs new DailyRotateFile({ dirname: logDir, // dossier cible pour les logs filename: "LOGS-%DATE%.log", // nom du fichier par date datePattern: "YYYY-MM-DD", // pattern de date dans le nom zippedArchive: false, // ne pas compresser les archives maxFiles: "7d", // conserve 14 jours d’historique format: format.combine( format.timestamp({ format: "YYYY-MM-DD HH:mm:ss" }), format.printf(({ timestamp, level, message }) => `${timestamp} | ${level.toUpperCase()} | ${message}` ) ), options: { flags: "a" }, // mode ajout à la fin (append) }), // Affichage des logs en console avec coloration et format simple new transports.Console({ format: format.combine( format.colorize(), format.timestamp({ format: "HH:mm:ss" }), format.printf(({ timestamp, level, message }) => `${timestamp} | ${level} | ${message}` ) ), }), ], }); // Helper pour marquer clairement le début de session dans les logs function logSessionStart() { logger.info(getSessionStartLine()); } // Helper pour marquer la fin de session dans les logs function logSessionEnd() { logger.info(getSessionEndLine()); } // Export du logger principal et des helpers pour usage dans d’autres modules module.exports = { logger, logSessionStart, logSessionEnd, logDir, };