src/utils/Log.js
import logLevel from './loggers/logLevel.js';
import Logger from './loggers/Logger.js';
import ConsoleLogger from './loggers/ConsoleLogger.js';
/**
* Provides well-formatted logging with log level filtering.
*/
class Log {
/**
* Create a new log.
*/
constructor() {
/** @type {Logger[]} */
this.loggers = [];
/** @type {String} */
this._logPrefix = '';
}
setLogPrefix(prefix) {
this._logPrefix = prefix;
for (let logger of this.loggers) {
logger.setLogPrefix(prefix);
}
}
/**
* Adds a new logger, which will process any log methods called.
* @param {Logger} logger - A new logger to process log requests.
*/
addLogger(logger) {
this.loggers.push(logger);
logger.setLogPrefix(this._logPrefix);
}
/**
* Logs a message to the console
* @param {type} level - Logging level
* @param {type} tag - Logging tag
* @param {type} text - Text to log
*/
send(level, tag, text) {
for (let logger of this.loggers) {
logger.send(level, tag, text);
}
}
/**
* Log an object.
* @param {type} level - Logging level
* @param {type} tag - Logging tag
* @param {type} text - Logging text
* @param {type} object - Object to be logged
*/
sendObject(level, tag, text, object) {
for (let logger of this.loggers) {
logger.sendObject(level, tag, text, object);
}
}
/**
* Alias for .send(Log.DEBUG, ...) / .sendObject(Log.DEBUG, ...)
* @param {String} tag Log tag
* @param {String} text Log message
* @param {Object} [text] Optional object to debug
*/
debug(tag, text, object) {
if (object != undefined) {
this.sendObject(logLevel.DEBUG, tag, text, object);
} else {
this.send(logLevel.DEBUG, tag, text);
}
}
/**
* Alias for .send(Log.INFO, ...) / .sendObject(Log.INFO, ...)
* @param {String} tag Log tag
* @param {String} text Log message
* @param {Object} [text] Optional object to debug
*/
info(tag, text, object) {
if (object != undefined) {
this.sendObject(logLevel.INFO, tag, text, object);
} else {
this.send(logLevel.INFO, tag, text);
}
}
/**
* Alias for .send(Log.WARN, ...) / .sendObject(Log.WARN, ...)
* @param {String} tag Log tag
* @param {String} text Log message
* @param {Object} [text] Optional object to debug
*/
warn(tag, text, object) {
if (object != undefined) {
this.sendObject(logLevel.WARN, tag, text, object);
} else {
this.send(logLevel.WARN, tag, text);
}
}
/**
* Alias for .send(Log.ERROR, ...) / .sendObject(Log.ERROR, ...)
* @param {String} tag Log tag
* @param {String} text Log message
* @param {Object} [text] Optional object to debug
*/
error(tag, text, object) {
if (object != undefined) {
this.sendObject(logLevel.ERROR, tag, text, object);
} else {
this.send(logLevel.ERROR, tag, text);
}
}
/**
* Alias for .send(Log.FATAL, ...) / .sendObject(Log.FATAL, ...)
* @param {String} tag Log tag
* @param {String} text Log message
* @param {Object} [text] Optional object to debug
*/
fatal(tag, text, object) {
if (object != undefined) {
this.sendObject(logLevel.FATAL, tag, text, object);
} else {
this.send(logLevel.FATAL, tag, text);
}
}
}
// Expose log levels on Log
/** @ignore */
var levelMap = logLevel.getMap();
for (var key in levelMap) {
Log.prototype[levelMap[key]] = key;
}
Log.loggers = {
Logger,
ConsoleLogger
};
export default Log;