UNPKG

nodefslogger

Version:

A custome JavaScript Logger using node fs module

188 lines (170 loc) 9.4 kB
// Initialize Environment Variable require('dotenv').config(); const fs = require('fs'), { SET_JSON, LOG_TO_CONSOLE, CLEAR_LOGS, LOG_DIR } = process.env, /** * Converts string to bolean if value is true * @param {string} arg */ string_to_boolean = (arg) => arg.toLocaleLowerCase() == 'true', Set_Json = string_to_boolean(SET_JSON), Clear_Logs = string_to_boolean(CLEAR_LOGS), Log_To_Console = string_to_boolean(LOG_TO_CONSOLE), /** * Checks if the file or directory exists * @param {string} file_dir -> Path for file or directory * @param {function} callback -> sends result as calback function */ file_dir_exists = (file_dir, callback) => fs.stat(process.cwd() + file_dir, (err) => err ? callback({ result: false }) : callback({ result: true })), /** * Creates directory * @param {string} dirpath -> Path to directory * @param {function} callback -> sends result as object using callback function */ mkdir = (dirpath, callback) => fs.mkdir(process.cwd() + dirpath, { recursive: true }, (error) => !error ? callback({ result: true, message: 'Directory created successfully' }) : callback({ result: false, message: 'Error occured', error })), /** * Creates .json File and write message as well * @param {string} file_name -> File Name * @param {string} file_with_dir -> Path to file with directory * @param {string} message -> message to append * @param {function} callback -> sends result as object using callback function */ create_json_File = (file_name, file_with_dir, message, callback) => { let Json_log = { Logs: [] }; Json_log.Logs.push({ Log_Type: file_name, Date: Date(), Message: message }), fs.writeFile(process.cwd() + file_with_dir, JSON.stringify(Json_log, null, 2), "utf8", error => callback(error ? { result: !1, message: "Error occured", error: error } : { result: !0, message: "File Created successfully" })) }, /** * Appends data to .json file * @param {string} file_name -> File Name * @param {string} file_with_dir -> Path to file with directory * @param {string} message -> message to append * @param {function} callback -> sends result as object using callback function */ append_to_json_file = (file_name, file_with_dir, message, callback) => fs.readFile(process.cwd() + file_with_dir, "utf8", (err, data) => { if (err) console_error(err); else if (0 != data.length) try { let dataSet = JSON.parse(data); dataSet.Logs.push({ Log_Type: file_name, Date: Date(), Message: message }), fs.writeFileSync(process.cwd() + file_with_dir, JSON.stringify(dataSet, null, 2), "utf8", error => callback(error ? { result: !1, message: "Error occured", error: error } : { result: !0, message: "Data append successfully" })) } catch { } else create_json_File(file_name, file_with_dir, message, callback) }), /** * Clears out the .json file * @param {string} file_with_dir -> Path to file with directory * @param {function} callback -> sends result as object using callback function */ clear_json_data = (file_with_dir, callback) => fs.truncate(process.cwd() + file_with_dir, 0, () => callback({ result: true, message: `Data removed successfully from ${file_with_dir.split('\\')[2]} file.` })), /** * Creates .log File and append message as well * @param {string} file_name -> File Name * @param {string} file_with_dir -> Path to file with directory * @param {string} message -> message to append * @param {function} callback -> sends result as object using callback function */ create_log_File = (file_name, file_with_dir, message, callback) => fs.writeFile(process.cwd() + file_with_dir, `${file_name} LOG : ${Date()} ${message} \n`, (error) => !error ? callback({ result: true, message: 'File Created successfully' }) : callback({ result: false, message: 'Error occured', error })), /** * Appends data to .log file * @param {string} file_name -> ँषिभ ल्बफभ * @param {string} file_with_dir -> Path to file with directory * @param {string} message -> message to append * @param {function} callback -> sends result as object using callback function */ append_to_log_file = (file_name, file_with_dir, message, callback) => fs.appendFile(process.cwd() + file_with_dir, `${file_name} LOG : ${Date()} ${message} \n`, (error) => !error ? callback({ result: true, message: 'Data append successfully' }) : callback({ result: false, message: 'Error occured', error })), /** * Clears out the .log file * @param {string} file_with_dir -> Path to file with directory * @param {function} callback -> sends result as object using callback function */ clear_log_data = (file_with_dir, callback) => fs.truncate(process.cwd() + file_with_dir, 0, () => callback({ result: true, message: `Data removed successfully from ${file_with_dir.split('\\')[2]} file.` })), /** * Logs out error * @param {object} response */ console_error = response => { console.log(response.error), console.error(response.error) }, /** * Appends to .log file * @param {string} file_name * @param {string} file * @param {string} error */ append_log = (file_name, file, message) => append_to_log_file(file_name, file, message, (response) => { if (!response.result) console_error(response) }), /** * Appends to .json file * @param {string} file_name * @param {string} file * @param {string} error */ append_json = (file_name, file, message) => append_to_json_file(file_name, file, message, (response) => { if (!response.result) console_error(response) }), /** * Returns File Name * @param {string} file */ file_extension = () => Set_Json ? '.json' : '.log'; /** * Logger Core Class - @version 0.0.1 * * Made with ❤️ by Dibesh Raj Subedi * * Creates a logs and saves on file */ module.exports = class Logger_Core { /** * Log data to file * @param {string} file_name */ constructor(file_name) { // Initializing Environment Variable this.file_name = file_name; this.dir = `\\${LOG_DIR}\\${this.file_name.toUpperCase()}\\`; this.file = this.dir + this.file_name + file_extension(); // Clears Out Logs if set true if (Clear_Logs) this.clear(); } /** * Clears out the log file data if true is send as param * @param {boolean} clear -> default false */ clear(show = false) { Set_Json ? clear_json_data(this.file, response => { show && response.result && console.log(response.message) }) : clear_log_data(this.file, response => { show && response.result && console.log(response.message) }); } /** * Logs error to file */ log() { let info = [...arguments]; info.forEach((messag) => { // Check if Set Json true file_dir_exists(this.file, (response) => { if (!Set_Json) { // File Dir exists append error if (response.result) append_log(this.file_name.toUpperCase(), this.file, messag); else { // Create dir, file and append error mkdir(this.dir, (resp) => { if (resp.result) { // Create file and append error create_log_File(this.file_name.toUpperCase(), this.file, messag, (res) => { if (!res.result) console_error(res); }); } else console_error(resp); }); } } else { // File Dir exists append error if (response.result) append_json(this.file_name.toUpperCase(), this.file, messag); else { // Create dir, file and append error mkdir(this.dir, (resp) => { if (resp.result) { // Create file and append error create_json_File(this.file_name.toUpperCase(), this.file, messag, (res) => { if (!res.result) console_error(res); }); } else console_error(resp); }); } } // Checks If log to console is true if (Log_To_Console) console.log(`${this.file_name.toUpperCase()} LOG : ${Date()} ${messag}`); }); }); } /** * Returns json Object from file if it exists * @param {function} callback */ get_json(callback) { if (!Set_Json) return callback({ result: !1, response: 'SET_JSON is not enabled on Environment!' }); else { fs.readFile(process.cwd() + this.file, "utf8", (err, data) => { if (err) console.error(err); else if (0 != data.length) return callback({ result: !0, response: data }) }); } } }