first commit

This commit is contained in:
Charlotte Croce 2025-04-07 12:22:06 -04:00
commit 7988853b57
43 changed files with 8415 additions and 0 deletions

103
src/utils/logger.js Normal file
View file

@ -0,0 +1,103 @@
/**
* logger.js
* Handles logging functionality
*/
const fs = require('fs');
const path = require('path');
const { LOGGING_CONFIG } = require('../config/appConfig');
// Define log levels and their priority (higher number = higher priority)
const LOG_LEVELS = {
DEBUG: 1,
INFO: 2,
WARN: 3,
ERROR: 4
};
// Get configured log level from config, default to INFO if not specified
const configuredLevel = (LOGGING_CONFIG?.level || 'info').toUpperCase();
const configuredLevelValue = LOG_LEVELS[configuredLevel] || LOG_LEVELS.INFO;
// Ensure logs directory exists
const LOGS_DIR = path.join(__dirname, '..', '..', 'logs');
if (!fs.existsSync(LOGS_DIR)) {
fs.mkdirSync(LOGS_DIR, { recursive: true });
}
// Use log file from config if available, otherwise use default
const LOG_FILE = LOGGING_CONFIG?.file
? path.resolve(path.join(__dirname, '..', '..'), LOGGING_CONFIG.file)
: path.join(LOGS_DIR, 'fylgja.log');
// Create logger object
const logger = {
/**
* Internal method to write log entry to file and console if level meets threshold
* @param {string} level - Log level (DEBUG, INFO, WARN, ERROR)
* @param {string} message - Log message to write
*/
_writeToFile: (level, message) => {
// Check if this log level should be displayed based on configured level
const levelValue = LOG_LEVELS[level] || 0;
if (levelValue >= configuredLevelValue) {
const timestamp = new Date().toISOString();
const logEntry = `${timestamp} ${level}: ${message}\n`;
// Append to log file
try {
fs.appendFileSync(LOG_FILE, logEntry);
} catch (err) {
console.error(`Failed to write to log file: ${err.message}`);
}
// Also log to console with appropriate method
switch (level) {
case 'ERROR':
console.error(logEntry.trim());
break;
case 'WARN':
console.warn(logEntry.trim());
break;
case 'DEBUG':
console.debug(logEntry.trim());
break;
case 'INFO':
default:
console.info(logEntry.trim());
}
}
},
/**
* Log an info message
* @param {string} message - Message to log
*/
info: (message) => logger._writeToFile('INFO', message),
/**
* Log an error message
* @param {string} message - Message to log
*/
error: (message) => logger._writeToFile('ERROR', message),
/**
* Log a warning message
* @param {string} message - Message to log
*/
warn: (message) => logger._writeToFile('WARN', message),
/**
* Log a debug message
* @param {string} message - Message to log
*/
debug: (message) => logger._writeToFile('DEBUG', message),
/**
* Get the current log level
* @returns {string} Current log level
*/
getLogLevel: () => configuredLevel
};
module.exports = logger;