node-test-bed-adapter
Version:
An adapter to connect a node.js application to the Test-bed's Common Information Space or Common Simulation Space.
71 lines • 1.95 kB
JavaScript
import { EventEmitter } from 'events';
import { LogLevel } from './log-levels.mjs';
/**
* Singleton logger, who is given a list of loggers that do the actual logging.
*
* Event emitter:
* 'error': Returns logger's error
* 'message': Returns logger's message
*/
export class Logger extends EventEmitter {
static _instance;
loggers = [];
minLevel = LogLevel.Critical;
isInitialized = false;
constructor() {
super();
}
static get instance() {
if (!Logger._instance) {
Logger._instance = new Logger();
}
return Logger._instance;
}
initialize(loggers) {
this.loggers = loggers;
this.setMinLogLevel();
this.isInitialized = true;
}
addLogger(logger) {
this.loggers.push(logger);
this.setMinLogLevel();
}
info(msg) {
this.log(LogLevel.Info, msg);
}
debug(msg) {
this.log(LogLevel.Debug, msg);
}
warn(msg) {
this.log(LogLevel.Warn, msg);
}
error(msg) {
this.log(LogLevel.Error, msg);
}
critical(msg) {
this.log(LogLevel.Critical, msg);
}
sill(msg) {
this.log(LogLevel.Sill, msg);
}
setMinLogLevel() {
this.minLevel = this.loggers.reduce((p, c) => (c.minLevel < p ? c.minLevel : p), Number.MAX_SAFE_INTEGER);
}
log(level, msg) {
if (!this.isInitialized || level < this.minLevel || !this.loggers) {
return;
}
const message = typeof msg === 'object' ? JSON.stringify(msg) : msg;
this.loggers
.filter((logger) => level >= logger.minLevel)
.forEach((logger) => logger.logger.log(level, message, (err, result) => {
if (err) {
this.emit('error', err);
}
else if (result) {
this.emit('message', result);
}
}));
}
}
//# sourceMappingURL=logger.mjs.map