First commit
This commit is contained in:
85
modules/logger.js
Normal file
85
modules/logger.js
Normal file
@@ -0,0 +1,85 @@
|
||||
const fs = require("node:fs")
|
||||
const path = require("node:path")
|
||||
require("colors")
|
||||
require("dotenv").config({
|
||||
quiet: true
|
||||
})
|
||||
|
||||
function cleanup($stream) {
|
||||
if (!$stream.destroyed) {
|
||||
$stream.end()
|
||||
}
|
||||
}
|
||||
|
||||
function write($stream, level, color, content, extraLabels = []) {
|
||||
const date = new Date().toISOString()
|
||||
const message = typeof content === "string" ? content : JSON.stringify(content, null, 2)
|
||||
|
||||
let consoleLabels = ""
|
||||
let fileLabels = ""
|
||||
|
||||
if (Array.isArray(extraLabels) && extraLabels.length > 0) {
|
||||
for (let i = 0; i < extraLabels.length; i += 2) {
|
||||
const labelName = extraLabels[i]
|
||||
const labelColor = extraLabels[i + 1]
|
||||
if (labelName) {
|
||||
fileLabels += ` [${labelName}]`
|
||||
if (labelColor && labelName[labelColor]) {
|
||||
consoleLabels += ` [${labelName[labelColor]}]`
|
||||
} else {
|
||||
consoleLabels += ` [${labelName.white}]`
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
console.log(`[${date}] `.magenta + `[${level}]`[color] + consoleLabels + " " + message)
|
||||
$stream.write(`[${date}] [${level}]${fileLabels} ${stripColors(message)}\n`)
|
||||
}
|
||||
|
||||
function createLogger(root) {
|
||||
const fileName = (/false/).test(process.env.IS_PROD.toLowerCase()) ? new Date().toLocaleString("fr-FR", { timeZone: "UTC" }).replace(/[\/:]/g, "-").replace(/ /g, "_") : "DEV-LOG"
|
||||
|
||||
const logsDir = path.join(root, "logs")
|
||||
|
||||
if (!fs.existsSync(logsDir)) {
|
||||
fs.mkdirSync(logsDir, { recursive: true })
|
||||
}
|
||||
|
||||
const stream = fs.createWriteStream(path.join(logsDir, `${fileName}.log`), { flags: "a" })
|
||||
|
||||
process.on("exit", () => {
|
||||
cleanup(stream)
|
||||
})
|
||||
|
||||
process.on("SIGINT", () => {
|
||||
cleanup(stream)
|
||||
process.exit()
|
||||
})
|
||||
|
||||
return {
|
||||
log: (content, labels) => {
|
||||
write(stream, "INFO", "green", content, labels)
|
||||
},
|
||||
error: (content, labels) => {
|
||||
write(stream, "ERROR", "red", content, labels)
|
||||
},
|
||||
warn: (content, labels) => {
|
||||
write(stream, "WARN", "yellow", content, labels)
|
||||
},
|
||||
debug: (content, labels) => {
|
||||
write(stream, "DEBUG", "white", content, labels)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function stripColors(string) {
|
||||
if (!string || typeof string !== "string") {
|
||||
return string
|
||||
}
|
||||
return string.replace(/\x1B\[[0-9;]*[mK]/g, "")
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
createLogger
|
||||
}
|
||||
Reference in New Issue
Block a user