@lf-lang/reactor-ts
Version:
A reactor-oriented programming framework in TypeScript
142 lines • 4.5 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Log = void 0;
const pino_1 = __importDefault(require("pino"));
/**
* Utilities for the reactor runtime.
*
* @author Marten Lohstroh (marten@berkeley.edu)
*/
/**
* Global logging facility that has multiple levels of severity.
*/
// eslint-disable-next-line @typescript-eslint/no-namespace
var Log;
(function (Log) {
/**
* Log levels for `Log`.
* This LogLevel is inherited from ULog and is kept for compatibility/abstraction purposes.
* As we switch to pinojs, it adds `fatal` but lacks `log`.
* @see Log
*/
let LogLevel;
(function (LogLevel) {
LogLevel["FATAL"] = "fatal";
LogLevel["ERROR"] = "error";
LogLevel["WARN"] = "warn";
LogLevel["INFO"] = "info";
LogLevel["DEBUG"] = "debug";
})(LogLevel = Log.LogLevel || (Log.LogLevel = {}));
/**
* Global instance of ulog that performs the logging.
*/
Log.globalLogger = (0, pino_1.default)({
name: "reactor-ts",
transport: {
target: "pino-pretty",
options: {
colorize: true,
sync: true,
ignore: "pid,hostname,time"
}
}
});
/**
* Horizontal rule.
*/
Log.hr = "=".repeat(80);
/**
* Map that keeps track of active loggers.
*/
const loggers = new Map();
/**
* Get the logger instance associated with the given module.
* If it does not exist, it is created.
* @param module The name associated with the logger
*/
function getInstance(module) {
let logger = loggers.get(module);
if (logger == null) {
logger = Log.globalLogger.child({ module });
loggers.set(module, logger);
}
return logger;
}
Log.getInstance = getInstance;
function setLevel(severity, module) {
if (module != null) {
const logger = loggers.get(module);
if (logger != null) {
logger.level = severity.valueOf();
}
return;
}
Log.globalLogger.level = severity.valueOf();
}
Log.setLevel = setLevel;
/**
* Log a message with severity `severity`. The `message` callback
* is only invoked if the ulog instance has a log level higher than
* `severity`.
* @param obj The object to call the message callback on.
* @param message Callback that returns a message string.
* @param module The name associated with the logger.
* @see LogLevel
*/
const logWithSeverity = (severity, obj, message, module) => {
const logger = module != null ? getInstance(module) : Log.globalLogger;
if (!logger.isLevelEnabled(severity.valueOf())) {
return;
}
switch (severity) {
case LogLevel.FATAL: {
logger.fatal(message.call(obj));
break;
}
case LogLevel.ERROR: {
logger.error(message.call(obj));
break;
}
case LogLevel.WARN: {
logger.warn(message.call(obj));
break;
}
case LogLevel.INFO: {
logger.info(message.call(obj));
break;
}
case LogLevel.DEBUG: {
logger.debug(message.call(obj));
break;
}
}
};
function fatal(obj, message, module) {
logWithSeverity(LogLevel.FATAL, obj, message, module);
}
Log.fatal = fatal;
function error(obj, message, module) {
logWithSeverity(LogLevel.ERROR, obj, message, module);
}
Log.error = error;
function warn(obj, message, module) {
logWithSeverity(LogLevel.WARN, obj, message, module);
}
Log.warn = warn;
function info(obj, message, module) {
logWithSeverity(LogLevel.INFO, obj, message, module);
}
Log.info = info;
function log(obj, message, module) {
logWithSeverity(LogLevel.INFO, obj, message, module);
}
Log.log = log;
function debug(obj, message, module) {
logWithSeverity(LogLevel.DEBUG, obj, message, module);
}
Log.debug = debug;
})(Log || (exports.Log = Log = {}));
//# sourceMappingURL=util.js.map