Home Manual Reference Source

source/log/Logger.js

import AbstractLogger from "./AbstractLogger";
import LOGLEVEL from "./loglevel";


export default class Logger extends AbstractLogger {
    /**
     *
     * @param {string} name The name of the logger.
     * @param {LoggerSingleton} loggerSingleton The logger singleton
     *      this logger belongs to.
     */
    constructor(name, loggerSingleton) {
        super();
        this._name = name;
        this._logLevel = null;
        this._loggerSingleton = loggerSingleton;
    }

    /**
     * Get the name of this logger.
     * @returns {string}
     */
    get name() {
        return this._name;
    }

    /**
     * Set the loglevel for this logger.
     *
     * @param {int} logLevel The log level. Must be one of the loglevels
     *      defined in {@link LogLevels}.
     * @throws {RangeError} if {@link LogLevels#validateLogLevel} fails.
     */
    setLogLevel(logLevel) {
        LOGLEVEL.validateLogLevel(logLevel);
        this._logLevel = logLevel;
    }

    /**
     * Get the log level.
     *
     * If no log level has been set with {@link Logger#setLogLevel},
     * this returns {@link LoggerSingleton#getDefaultLogLevel}.
     *
     * @returns {int}
     */
    getLogLevel() {
        if(this._logLevel == null) {
            return this._loggerSingleton.getDefaultLogLevel();
        }
        return this._logLevel;
    }

    /**
     * Get textual name for the log level. If the logger
     * does not have a logLevel (if it inherits it from the LoggerSingleton)
     * a string with information about this and the default logLevel for the
     * LoggerSingleton is returned.
     *
     * Intended for debugging. The format of the string may change.
     *
     * @returns {string}
     */

    getTextualNameForLogLevel() {
        if(this._logLevel == null) {
            return '[default for LoggerSingleton - ' +
                `${this._loggerSingleton.getTextualNameForDefaultLogLevel()}]`;
        }
        return LOGLEVEL.getTextualNameForLogLevel(this.getLogLevel());
    }

    getDebugInfoString() {
        return `${this.name}: ${this.getTextualNameForLogLevel()}`;
    }
}