UNPKG

@eastsideco/escshopify

Version:

WIP JS library for Shopify, containing a variety of useful functionality.

145 lines (130 loc) 3.88 kB
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;