const moment = require('moment'); // constants const LOG_PREFIX_DEBUG = 'debug'; const LOG_PREFIX_INFO = 'info'; const LOG_PREFIX_WARNING = 'warning'; const LOG_PREFIX_ERROR = 'error'; const LOGLEVEL_DEBUG = 0; const LOGLEVEL_INFO = 1; const LOGLEVEL_WARNING = 2; const LOGLEVEL_ERROR = 3; var loglevel = getLogLevel(); var timestamp = getTimestamp(); function initialize() { return new Promise((resolve, reject) => { if (global.config == undefined) { reject('could not initialize logger, config is undefined'); } loglevel = getLogLevel(); timestamp = getTimestamp(); resolve(); }); } // get the loglevel function getLogLevel() { if (global.config?.log?.level == undefined) { return LOGLEVEL_INFO; } switch (global.config.log.level) { case LOG_PREFIX_DEBUG: case LOGLEVEL_DEBUG: return LOGLEVEL_DEBUG; case LOG_PREFIX_INFO: case LOGLEVEL_INFO: return LOGLEVEL_INFO; case LOG_PREFIX_WARNING: case LOGLEVEL_WARNING: return LOGLEVEL_WARNING; case LOG_PREFIX_ERROR: case LOGLEVEL_ERROR: return LOGLEVEL_ERROR; default: return LOGLEVEL_INFO; } } // get the timestamp format function getTimestamp() { if (global.config?.log?.format != undefined) { return global.config.log.format; } return "DD.MM.YYYY HH:mm:ss:SS"; } // prefix log with 'info' function info(message) { if (loglevel > LOGLEVEL_INFO) { return; } trace(message); } // prefix log with 'info' function warn(message) { if (loglevel > LOGLEVEL_WARNING) { return; } trace(message, 'warning'); } // prefix log with 'debug' function debug(message) { if (loglevel > LOGLEVEL_DEBUG) { return; } trace(message, 'debug'); } // prefix log with 'error' function error(message) { if (loglevel > LOGLEVEL_ERROR) { return; } if (message.stack) { trace(message.stack, 'error'); return; } if (message.errors !== undefined) { for (let index = 0; index < message.errors.length; index++) { trace(message.errors[index], 'error'); } return; } if (message.message) { trace(message.message, 'error'); return; } trace(message, 'error'); } // default logging function function trace(message, prefix) { if (message === undefined || message === null || message.length === 0) { return; } if (prefix === undefined || prefix === null || prefix.length === 0) { prefix = 'info'; } let print; switch (prefix) { case 'error': print = console.error; break; case 'debug': print = console.debug; break; case 'warning': print = console.warn; break; default: print = console.log; } message = moment().format(timestamp) + ' | ' + prefix + ' > ' + message; print(message); } // exports module.exports = { initialize, info, warn, debug, error };