UNPKG

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
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