first commit
This commit is contained in:
commit
7988853b57
43 changed files with 8415 additions and 0 deletions
103
src/utils/logger.js
Normal file
103
src/utils/logger.js
Normal 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;
|
Loading…
Add table
Add a link
Reference in a new issue