// Import necessary modules import debug from 'debug'; import { config } from 'dotenv'; import { writeFile } from 'fs'; import { inspect } from 'util'; // Load environment variables config(); const logLocation = process.env.LOG_LOCATION; const writeToLog = async (logMessage, appName) => { logMessage = `${String(logMessage)}\n`; writeFile( logLocation ?? `./${appName}.log`, logMessage, { encoding: "utf-8", flag: 'a+' }, (err) => { if (err) console.error(err); } ); }; /** * Create the different logging methods for a function * Namespace template = ("[app]:[fileName]:['INFO', 'WARNING', 'DEBUG', 'ERROR']") * @param {string} appName The name of the app to be used in the 'app' portion of the namespace * @param {string} fileName The name of the file calling the builder to be used in the 'fileName' portion of the namespace */ export class DebugBuilder { constructor(appName, fileName) { this.INFO = (...messageParts) => { const _info = debug(`${appName}:${fileName}:INFO`); _info(messageParts); writeToLog(`${new Date().toLocaleString('en-US', { timeZone: 'America/New_York' })} - ${appName}:${fileName}:INFO\t-\t${messageParts.map(messagePart => inspect(messagePart))}`, appName); }; this.DEBUG = (...messageParts) => { const _debug = debug(`${appName}:${fileName}:DEBUG`); _debug(messageParts); writeToLog(`${new Date().toLocaleString('en-US', { timeZone: 'America/New_York' })} - ${appName}:${fileName}:DEBUG\t-\t${messageParts.map(messagePart => inspect(messagePart))}`, appName); }; this.VERBOSE = (...messageParts) => { const _verbose = debug(`${appName}:${fileName}:VERBOSE`); _verbose(messageParts); writeToLog(`${new Date().toLocaleString('en-US', { timeZone: 'America/New_York' })} - ${appName}:${fileName}:VERBOSE\t-\t${messageParts.map(messagePart => inspect(messagePart))}`, appName); }; this.WARN = (...messageParts) => { const _warn = debug(`${appName}:${fileName}:WARNING`); _warn(messageParts); writeToLog(`${new Date().toLocaleString('en-US', { timeZone: 'America/New_York' })} - ${appName}:${fileName}:WARNING\t-\t${messageParts.map(messagePart => inspect(messagePart))}`, appName); }; this.ERROR = (...messageParts) => { const _error = debug(`${appName}:${fileName}:ERROR`); _error(messageParts); writeToLog(`${new Date().toLocaleString('en-US', { timeZone: 'America/New_York' })} - ${appName}:${fileName}:ERROR\t-\t${messageParts.map(messagePart => inspect(messagePart))}`, appName); if (process.env.EXIT_ON_ERROR && process.env.EXIT_ON_ERROR > 0) { writeToLog("!--- EXITING ---!", appName); setTimeout(() => process.exit(), process.env.EXIT_ON_ERROR_DELAY ?? 0); } }; } }