status-checker
Version:
A lean, dependency-free URL status checker library
136 lines • 3.8 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Logger = void 0;
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
/**
* Logger class for handling log messages
*/
class Logger {
/**
* Create a new Logger instance
* @param config Configuration object or log level string
*/
constructor(config) {
this.logLevels = {
error: 0,
warn: 1,
info: 2,
debug: 3
};
if (typeof config === 'string') {
this.logLevel = config;
this.logFile = undefined;
}
else if (config) {
this.logLevel = config.logLevel || 'info';
this.logFile = config.logFile;
}
else {
this.logLevel = 'info';
this.logFile = undefined;
}
}
/**
* Log a message at the specified level
* @param message Message to log
* @param level Log level
*/
log(message, level = 'info') {
if (this.shouldLog(level)) {
const timestamp = new Date().toISOString();
const formattedMessage = `[${timestamp}] [${level.toUpperCase()}] ${message}`;
// Console output
this.consoleLog(formattedMessage, level);
// File output if configured
if (this.logFile) {
this.fileLog(formattedMessage);
}
}
}
/**
* Log an error message
* @param message Error message
*/
error(message) {
this.log(message, 'error');
}
/**
* Log a warning message
* @param message Warning message
*/
warn(message) {
this.log(message, 'warn');
}
/**
* Log an info message
* @param message Info message
*/
info(message) {
this.log(message, 'info');
}
/**
* Log a debug message
* @param message Debug message
*/
debug(message) {
this.log(message, 'debug');
}
/**
* Check if a message at the given level should be logged
* @param level Log level to check
* @returns Whether the message should be logged
*/
shouldLog(level) {
const configLevel = this.logLevels[this.logLevel] || 2;
const messageLevel = this.logLevels[level] || 2;
return messageLevel <= configLevel;
}
/**
* Log a message to the console
* @param message Formatted message
* @param level Log level
*/
consoleLog(message, level) {
switch (level) {
case 'error':
console.error(message);
break;
case 'warn':
console.warn(message);
break;
case 'debug':
console.debug(message);
break;
case 'info':
default:
console.info(message);
break;
}
}
/**
* Log a message to a file
* @param message Formatted message
*/
fileLog(message) {
if (!this.logFile)
return;
try {
// Ensure directory exists
const dir = path_1.default.dirname(this.logFile);
if (!fs_1.default.existsSync(dir)) {
fs_1.default.mkdirSync(dir, { recursive: true });
}
// Append to log file
fs_1.default.appendFileSync(this.logFile, message + '\n');
}
catch (error) {
console.error(`Failed to write to log file: ${error}`);
}
}
}
exports.Logger = Logger;
//# sourceMappingURL=logger.js.map