@cere/rob-cli
Version:
CLI tool for deploying and managing rafts and data sources
201 lines • 7.61 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Logger = exports.LogLevel = void 0;
const chalk_1 = __importDefault(require("chalk"));
var LogLevel;
(function (LogLevel) {
LogLevel[LogLevel["TRACE"] = -1] = "TRACE";
LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG";
LogLevel[LogLevel["INFO"] = 1] = "INFO";
LogLevel[LogLevel["WARN"] = 2] = "WARN";
LogLevel[LogLevel["ERROR"] = 3] = "ERROR";
LogLevel[LogLevel["NONE"] = 4] = "NONE";
})(LogLevel || (exports.LogLevel = LogLevel = {}));
/**
* Simple logger with color output
*/
class Logger {
constructor(contextName, options = {}) {
this.contextName = contextName;
this.level = options.level !== undefined ? options.level : this.getGlobalLogLevel();
this.prefix = options.prefix || '';
}
/**
* Get the global log level from environment variable or use default INFO level
*/
getGlobalLogLevel() {
var _a;
const envLevel = (_a = process.env.ROB_LOG_LEVEL) === null || _a === void 0 ? void 0 : _a.toUpperCase();
if (envLevel) {
switch (envLevel) {
case 'TRACE':
return LogLevel.TRACE;
case 'DEBUG':
return LogLevel.DEBUG;
case 'INFO':
return LogLevel.INFO;
case 'WARN':
return LogLevel.WARN;
case 'ERROR':
return LogLevel.ERROR;
case 'NONE':
return LogLevel.NONE;
default:
return LogLevel.INFO;
}
}
return LogLevel.INFO;
}
/**
* Format log message with timestamp and context
*/
formatMessage(message) {
const timestamp = new Date().toISOString();
return `${this.prefix}[${timestamp}] [${this.contextName}] ${message}`;
}
/**
* Format an object for logging
*/
formatObject(obj) {
try {
return JSON.stringify(obj, null, 2);
}
catch (error) {
return `[Object cannot be stringified: ${error instanceof Error ? error.message : 'Unknown error'}]`;
}
}
/**
* Log trace message (only if log level is TRACE)
*/
trace(message) {
if (this.level <= LogLevel.TRACE) {
const formattedMessage = typeof message === 'string' ? message : this.formatObject(message);
console.debug(chalk_1.default.cyan(this.formatMessage(`TRACE: ${formattedMessage}`)));
}
}
/**
* Log debug message (only if log level is TRACE or DEBUG)
*/
debug(message) {
if (this.level <= LogLevel.DEBUG) {
const formattedMessage = typeof message === 'string' ? message : this.formatObject(message);
console.debug(chalk_1.default.gray(this.formatMessage(formattedMessage)));
}
}
/**
* Log info message (if log level is TRACE, DEBUG or INFO)
*/
info(message) {
if (this.level <= LogLevel.INFO) {
const formattedMessage = typeof message === 'string' ? message : this.formatObject(message);
console.info(chalk_1.default.blue(this.formatMessage(formattedMessage)));
}
}
/**
* Log success message (if log level is TRACE, DEBUG or INFO)
*/
success(message) {
if (this.level <= LogLevel.INFO) {
const formattedMessage = typeof message === 'string' ? message : this.formatObject(message);
console.info(chalk_1.default.green(this.formatMessage(formattedMessage)));
}
}
/**
* Log warning message (if log level is TRACE, DEBUG, INFO or WARN)
*/
warn(message) {
if (this.level <= LogLevel.WARN) {
const formattedMessage = typeof message === 'string' ? message : this.formatObject(message);
console.warn(chalk_1.default.yellow(this.formatMessage(formattedMessage)));
}
}
/**
* Log error message (if log level is TRACE, DEBUG, INFO, WARN or ERROR)
*/
error(message) {
if (this.level <= LogLevel.ERROR) {
const formattedMessage = typeof message === 'string' ? message : this.formatObject(message);
console.error(chalk_1.default.red(this.formatMessage(formattedMessage)));
}
}
/**
* Log an object as JSON
*/
json(label, obj) {
if (this.level <= LogLevel.DEBUG) {
const formattedJson = this.formatObject(obj);
console.debug(chalk_1.default.magenta(this.formatMessage(`${label}:`)));
console.debug(formattedJson);
}
}
/**
* Log HTTP request details
*/
httpRequest(method, url, headers, body) {
if (this.level <= LogLevel.TRACE) {
this.trace('HTTP Request:');
this.trace(`${method} ${url}`);
this.trace('Headers:');
this.trace(headers);
if (body) {
this.trace('Body:');
this.trace(body);
}
}
}
/**
* Log HTTP response details
*/
httpResponse(status, statusText, headers, body) {
if (this.level <= LogLevel.TRACE) {
this.trace('HTTP Response:');
this.trace(`${status} ${statusText}`);
this.trace('Headers:');
this.trace(headers);
if (body) {
this.trace('Body:');
this.trace(body);
}
}
}
/**
* Log a Terraform-style creating message
*/
creating(resourceType, id) {
console.log(`${chalk_1.default.blue('module')}${chalk_1.default.white('.')}${chalk_1.default.cyan(resourceType)}${chalk_1.default.white(':')} Creating...`);
}
/**
* Log a Terraform-style created message
*/
created(resourceType, id, timeTaken) {
console.log(`${chalk_1.default.blue('module')}${chalk_1.default.white('.')}${chalk_1.default.cyan(resourceType)}${chalk_1.default.white(':')} ` +
`Creation complete after ${chalk_1.default.yellow(timeTaken + 's')} ${chalk_1.default.white(`[id=${id}]`)}`);
}
/**
* Log a Terraform-style updating message
*/
updating(resourceType, id) {
console.log(`${chalk_1.default.blue('module')}${chalk_1.default.white('.')}${chalk_1.default.cyan(resourceType)}${chalk_1.default.white(':')} Updating...`);
}
/**
* Log a Terraform-style updated message
*/
updated(resourceType, id, timeTaken) {
console.log(`${chalk_1.default.blue('module')}${chalk_1.default.white('.')}${chalk_1.default.cyan(resourceType)}${chalk_1.default.white(':')} ` +
`Update complete after ${chalk_1.default.yellow(timeTaken + 's')} ${chalk_1.default.white(`[id=${id}]`)}`);
}
/**
* Log a Terraform-style completion summary
*/
completionSummary(added, changed, destroyed) {
console.log(`${chalk_1.default.green('Apply complete!')} Resources: ` +
`${added > 0 ? chalk_1.default.green(added + ' added') : chalk_1.default.white(added + ' added')}, ` +
`${changed > 0 ? chalk_1.default.yellow(changed + ' changed') : chalk_1.default.white(changed + ' changed')}, ` +
`${destroyed > 0 ? chalk_1.default.red(destroyed + ' destroyed') : chalk_1.default.white(destroyed + ' destroyed')}.`);
}
}
exports.Logger = Logger;
//# sourceMappingURL=logger.js.map