Home Manual Reference Source

source/log/loglevel.js

/**
 * Defines valid log levels.
 *
 * Not used directly, but instead via the LOGLEVEL
 * constant exported as default by this module.
 *
 * @example
 * import LOGLEVEL from 'ievv_jsbase/log/loglevel';
 * console.log('The debug loglevel is:', LOGLEVEL.DEBUG);
 * LOGLEVEL.validateLogLevel(10);
 */
export class LogLevels {
    constructor() {
        this._prettyLogLevelNames = {};
        this._prettyLogLevelNames[this.DEBUG] = 'DEBUG';
        this._prettyLogLevelNames[this.INFO] = 'INFO';
        this._prettyLogLevelNames[this.WARNING] = 'WARNING';
        this._prettyLogLevelNames[this.ERROR] = 'ERROR';
        this._prettyLogLevelNames[this.SILENT] = 'SILENT';
    }

    /**
     * Get the number for log level DEBUG.
     * @returns {number}
     */
    get DEBUG() {
        return 4;
    }

    /**
     * Get the number for log level INFO.
     * @returns {number}
     */
    get INFO() {
        return 3;
    }

    /**
     * Get the number for log level WARNING.
     * @returns {number}
     */
    get WARNING() {
        return 2;
    }

    /**
     * Get the number for log level ERROR.
     * @returns {number}
     */
    get ERROR() {
        return 1;
    }

    /**
     * Get the number for log level SILENT.
     * @returns {number}
     */
    get SILENT() {
        return 0;
    }

    /**
     * Validate a log level.
     *
     * Should be used by all functions/methods that set a log level.
     *
     * @param logLevel The loglevel.
     * @throws {RangeError} If ``logLevel`` is not one
     *   of:
     *
     *   - {@link LogLevels#DEBUG}
     *   - {@link LogLevels#INFO}
     *   - {@link LogLevels#WARNING}
     *   - {@link LogLevels#ERROR}
     *   - {@link LogLevels#SILENT}
     */
    validateLogLevel(logLevel) {
        if (logLevel > this.DEBUG || logLevel < this.SILENT) {
            throw new RangeError(
                `Invalid log level: ${logLevel}, must be between ` +
                `${this.SILENT} (SILENT) and ${this.DEBUG} (DEBUG)`);
        }
    }

    /**
     * Get the textual name for a log level.
     *
     * @param {number} logLevel The log level to get a textual name for.
     * @returns {string}
     *
     * @example
     * const infoText = LOGLEVEL.getTextualNameForLogLevel(LOGLEVEL.INFO);
     * // infoText === 'INFO'
     */
    getTextualNameForLogLevel(logLevel) {
        return this._prettyLogLevelNames[logLevel];
    }
}

const LOGLEVEL = new LogLevels();
export default LOGLEVEL;