const HolesailLogger = require('holesail-logger'); // Define LOG_LEVELS explicitly since they may not be accessible from the logger instance const LOG_LEVELS = { DEBUG: 0, INFO: 1, WARN: 2, ERROR: 3 }; // Create a singleton instance of HolesailLogger with minLevel from .env let logger; try { logger = new HolesailLogger({ enabled: true, prefix: 'P2NS', level: parseInt(process.env.LOG_LEVEL || 0) }); // Test logger initialization logger.log({ type: LOG_LEVELS.INFO, msg: 'Logger initialized successfully' }); } catch (error) { console.error(`Failed to initialize HolesailLogger: ${error.message}`); // Fallback to console-based logging logger = { log: ({ type, msg }) => { const timestamp = new Date().toISOString(); const levelStr = type === 0 ? 'DEBUG' : type === 1 ? 'INFO' : type === 2 ? 'WARN' : type === 3 ? 'ERROR' : 'UNKNOWN'; const consoleMethod = type === 2 ? console.warn : type === 3 ? console.error : console.log; consoleMethod(`${timestamp} [P2NS] [${levelStr}] ${msg}`); } }; } // Wrapper functions to support prefix parameter and correct log level function logDebug(prefix, message) { logger.log({ type: LOG_LEVELS.DEBUG, msg: `[${prefix}] ${message}` }); } function logInfo(prefix, message) { logger.log({ type: LOG_LEVELS.INFO, msg: `[${prefix}] ${message}` }); } function logWarn(prefix, message) { logger.log({ type: LOG_LEVELS.WARN, msg: `[${prefix}] ${message}` }); } function logError(prefix, message) { logger.log({ type: LOG_LEVELS.ERROR, msg: `[${prefix}] ${message}` }); } /** * Update log level at runtime * @param {number} newLevel - New log level (0-3) */ function updateLogLevel(newLevel) { try { // Recreate logger with new level logger = new HolesailLogger({ enabled: true, prefix: 'P2NS', level: newLevel }); logger.log({ type: LOG_LEVELS.INFO, msg: `Log level updated to ${newLevel}` }); } catch (error) { console.error(`Failed to update logger level: ${error.message}`); // Fallback logger logger = { log: ({ type, msg }) => { const timestamp = new Date().toISOString(); const levelStr = type === 0 ? 'DEBUG' : type === 1 ? 'INFO' : type === 2 ? 'WARN' : type === 3 ? 'ERROR' : 'UNKNOWN'; const consoleMethod = type === 2 ? console.warn : type === 3 ? console.error : console.log; if (type >= newLevel) { consoleMethod(`${timestamp} [P2NS] [${levelStr}] ${msg}`); } } }; } } module.exports = { logDebug, logInfo, logWarn, logError, updateLogLevel };