Files
p2ns/includes/infrastructure/logger.js
T
2025-12-17 20:05:50 -05:00

74 lines
2.5 KiB
JavaScript

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 };