/** * Simple logger for free-games-claimer */ const LOG_LEVELS = { trace: 0, debug: 1, info: 2, warn: 3, error: 4, }; const currentLevel = process.env.LOG_LEVEL ? LOG_LEVELS[process.env.LOG_LEVEL.toLowerCase()] : LOG_LEVELS.info; function formatMessage(level, module, message, data) { const timestamp = new Date().toISOString(); const moduleStr = module ? `[${module}] ` : ''; const dataStr = data && Object.keys(data).length > 0 ? ' ' + JSON.stringify(data) : ''; return `${timestamp} ${level.toUpperCase().padEnd(5)} ${moduleStr}${message}${dataStr}`; } function createLogger(module) { return { trace: (dataOrMessage, message) => { if (currentLevel <= LOG_LEVELS.trace) { const [data, msg] = typeof dataOrMessage === 'string' ? [null, dataOrMessage] : [dataOrMessage, message]; console.log(formatMessage('trace', module, msg || '', data)); } }, debug: (dataOrMessage, message) => { if (currentLevel <= LOG_LEVELS.debug) { const [data, msg] = typeof dataOrMessage === 'string' ? [null, dataOrMessage] : [dataOrMessage, message]; console.log(formatMessage('debug', module, msg || '', data)); } }, info: (dataOrMessage, message) => { if (currentLevel <= LOG_LEVELS.info) { const [data, msg] = typeof dataOrMessage === 'string' ? [null, dataOrMessage] : [dataOrMessage, message]; console.log(formatMessage('info', module, msg || '', data)); } }, warn: (dataOrMessage, message) => { if (currentLevel <= LOG_LEVELS.warn) { const [data, msg] = typeof dataOrMessage === 'string' ? [null, dataOrMessage] : [dataOrMessage, message]; console.log(formatMessage('warn', module, msg || '', data)); } }, error: (dataOrMessage, message) => { if (currentLevel <= LOG_LEVELS.error) { const [data, msg] = typeof dataOrMessage === 'string' ? [null, dataOrMessage] : [dataOrMessage, message]; console.log(formatMessage('error', module, msg || '', data)); } }, child: childData => { const childModule = childData?.module || module; return createLogger(childModule); }, }; } const logger = createLogger('root'); export default logger;