//Loguix - Système de log simplifié //Concu par Raphael PICOT - Raphix //GIT : https://git.raphix.fr/lib/loguix const fs = require("fs") const path = require("path") const basic = require("./basics") var isSetup = false var logInstance = new Map() var logStream = null /** * Configuration du module * @param {string} logsDir * @param {string} packageJsonPath */ module.exports.setup = function(logsDir, packageJsonPath) { if(!isSetup) { if(!logsDir) { return new Error("[Loguix] - Error in Setup : MISS_LOGS_DIR") } if(!fs.existsSync(logsDir + path.sep)) { fs.mkdir(logsDir, (err) => { if(!err) { console.log("[Logs] - Dossier de logs crée ! !") } else { console.log("[Logs] - Erreur d'écriture par manque de permission ") console.log(err) } }) } logStream = fs.createWriteStream(logsDir + path.sep + basic.getDate(true) + ".log", { flags: 'a' }); var nameOfPackage = "Unknown" var versionOfPackage = "-.-.-" try { const packageJson = fs.readFileSync(packageJsonPath) const packageJsonParsed = JSON.parse(packageJson) nameOfPackage = packageJsonParsed.name versionOfPackage = packageJsonParsed.version } catch (error) { console.log("[Loguix] - Error in Setup : INVALID_PACKAGE_JSON") console.log(error) } const packageJson = fs.readFileSync(packageJsonPath) logStream.write("[" + nameOfPackage + "@"+ versionOfPackage + "] - [" + basic.getDate(true) + "]" + "\n") logStream.write("----------------------------------------------------------------" + "\n") process.on('uncaughtException', (err) => { console.error("["+ "FATAL" + "] - The application has encountered an error ! Please Restart ! #E = " + err + "\n") console.error(err) logStream.write("[" + basic.getDate() + "] - ["+ "FATAL" + "] - The application has encountered an error ! Please Restart ! #E = " + err + "\n") logStream.end( "["+ "UNCAUGHT_EXCEPTION" + "]" + " - [END OF LOGS] - [" + basic.getDate() + ']') logStream.close() }); process.on('beforeExit', (err) => { logStream.end( "["+ "BEFORE_EXIT" + "]" + " - [END OF LOGS] - [" + basic.getDate(true) + ']') logStream.close() }); isSetup = true } else { console.log("Loguix is already configure") } } /** * Déclare une nouvelle section * @param {string} typeName Nom de la section associé */ module.exports.LogType = class { constructor(typeName) { this.type = typeName; this.steps = new Map() this.step = this.initializeStep() logInstance.set(typeName, this) } log(txt) { var logtext = "[" + this.type + "] - [INFO] - " + txt logStream.write("[" + basic.getDate() + "] - " + logtext + "\n") console.log(logtext) } warn(txt) { var logtext = "[" + this.type + "] - [WARN] - " + txt logStream.write("[" + basic.getDate() + "] - " + logtext + "\n") console.log(logtext) } error(txt) { var logtext = "[" + this.type + "] - [ERROR] - " + txt logStream.write("[" + basic.getDate() + "] - " + logtext + "\n") console.log(logtext) } initializeStep() { const parent = this; return { init: function(id, desc) { parent.steps.set(id, desc) var logtext = "[" + parent.type + "] - [INFO] - [STEP] - " + desc + " - En cours ..." logStream.write("[" + basic.getDate() + "] - " + logtext + "\n") console.log(logtext) }, end: function(id) { if(parent.steps.has(id)) { var logtext = "[" + parent.type + "] - [INFO] - [STEP] - " + parent.steps.get(id) + " - Terminé !" logStream.write("[" + basic.getDate() + "] - " + logtext + "\n") console.log(logtext) parent.steps.delete(id) } else { var logtext = "[" + parent.type + "] - [WARN] - [STEP] - '" + id + "' n'est pas enregistré en tant qu'étape !" logStream.write("[" + basic.getDate() + "] - " + logtext + "\n") console.log(logtext) } }, error: function(id, errorDesc) { if(parent.steps.has(id)) { var logtext = "[" + parent.type + "] - [ERROR] - [STEP] - " + parent.steps.get(id) + " - Une erreur a été rencontré dans l'étape ! : #E = " + errorDesc logStream.write("[" + basic.getDate() + "] - " + logtext + "\n") console.log(logtext) parent.steps.delete(id) } else { var logtext = "[" + parent.type + "] - [WARN] - [STEP] - '" + id + "' n'est pas enregistré en tant qu'étape !" logStream.write("[" + basic.getDate() + "] - " + logtext + "\n") console.log(logtext) } } } } } module.exports.getInstance = function (name) { if(logInstance.has(name)) { return logInstance.get(name) } else { var logtext = "[Logs] - [ERROR] - '" + name + "' n'est pas enregistré en tant qu'instance de log !" logStream.write("[" + basic.getDate() + "] - " + logtext + "\n") console.error(logtext) return null } }