UNPKG

@schukai/monster

Version:

Monster is a simple library for creating fast, robust and lightweight websites.

283 lines (253 loc) 6.16 kB
/** * Copyright © Volker Schukai and all contributing authors, {{copyRightYear}}. All rights reserved. * Node module: @schukai/monster * * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3). * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html * * For those who do not wish to adhere to the AGPLv3, a commercial license is available. * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms. * For more information about purchasing a commercial license, please contact Volker Schukai. * * SPDX-License-Identifier: AGPL-3.0 */ import { Handler } from "./handler.mjs"; import { LogEntry } from "./logentry.mjs"; import { Base } from "../types/base.mjs"; import { validateInteger, validateObject, validateString, } from "../types/validate.mjs"; export { Logger, ALL, TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF }; /** * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF * @type {number} */ const ALL = 255; /** * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF * @type {number} */ const TRACE = 64; /** * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF * @type {number} */ const DEBUG = 32; /** * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF * @type {number} */ const INFO = 16; /** * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF * @type {number} */ const WARN = 8; /** * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF * @type {number} */ const ERROR = 4; /** * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF * @type {number} */ const FATAL = 2; /** * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF * @type {number} */ const OFF = 0; /** * The logger is a class that takes care of logging. * * @license AGPLv3 * @since 1.5.0 * @copyright Volker Schukai */ class Logger extends Base { /** * */ constructor() { super(); this.handler = new Set(); } /** * * @param {Handler} handler * @return {Logger} * @throws {Error} the handler must be an instance of Handler */ addHandler(handler) { validateObject(handler); if (!(handler instanceof Handler)) { throw new Error("the handler must be an instance of Handler"); } this.handler.add(handler); return this; } /** * * @param {Handler} handler * @return {Logger} * @throws {Error} the handler must be an instance of Handler */ removeHandler(handler) { validateObject(handler); if (!(handler instanceof Handler)) { throw new Error("the handler must be an instance of Handler"); } this.handler.delete(handler); return this; } /** * log Trace message * * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF (ALL = 0xff;OFF = 0x00; * * @param {*} arguments * @return {Logger} * @since 1.5.0 */ logTrace(...args) { if (typeof args !== "object" || args[0] === null) { throw new Error("the first argument must be an object"); } triggerLog.apply(this, [TRACE, ...args]); return this; } /** * log Debug message * * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF (ALL = 0xff;OFF = 0x00; * * @param {*} arguments * @return {Logger} * @since 1.5.0 */ logDebug(...args) { if (typeof args !== "object" || args[0] === null) { throw new Error("the first argument must be an object"); } triggerLog.apply(this, [DEBUG, ...args]); return this; } /** * log Info message * * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF (ALL = 0xff;OFF = 0x00; * * * @param {*} arguments * @return {Logger} * @since 1.5.0 */ logInfo(...args) { if (typeof args !== "object" || args[0] === null) { throw new Error("the first argument must be an object"); } triggerLog.apply(this, [INFO, ...args]); return this; } /** * log Warn message * * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF (ALL = 0xff;OFF = 0x00; * * @param {*} arguments * @return {Logger} * @since 1.5.0 */ logWarn(...args) { if (typeof args !== "object" || args[0] === null) { throw new Error("the first argument must be an object"); } triggerLog.apply(this, [WARN, ...args]); return this; } /** * log Error message * * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF (ALL = 0xff;OFF = 0x00; * * @param {*} arguments * @return {Logger} * @since 1.5.0 */ logError(...args) { if (typeof args !== "object" || args[0] === null) { throw new Error("the first argument must be an object"); } triggerLog.apply(this, [ERROR, ...args]); return this; } /** * log Fatal message * * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF (ALL = 0xff;OFF = 0x00; * * @param {*} arguments * @return {Logger} * @since 1.5.0 */ logFatal(...args) { if (typeof args !== "object" || args[0] === null) { throw new Error("the first argument must be an object"); } triggerLog.apply(this, [FATAL, ...args]); return this; } /** * Labels * * @param {integer} level * @return {string} */ getLabel(level) { validateInteger(level); if (level === ALL) return "ALL"; if (level === TRACE) return "TRACE"; if (level === DEBUG) return "DEBUG"; if (level === INFO) return "INFO"; if (level === WARN) return "WARN"; if (level === ERROR) return "ERROR"; if (level === FATAL) return "FATAL"; if (level === OFF) return "OFF"; return "unknown"; } /** * Level * * @param {string} label * @return {integer} */ getLevel(label) { validateString(label); if (label === "ALL") return ALL; if (label === "TRACE") return TRACE; if (label === "DEBUG") return DEBUG; if (label === "INFO") return INFO; if (label === "WARN") return WARN; if (label === "ERROR") return ERROR; if (label === "FATAL") return FATAL; if (label === "OFF") return OFF; return 0; } } /** * Log triggern * * @param {integer} loglevel * @param {*} args * @return {Logger} * @private */ function triggerLog(loglevel, ...args) { for (const handler of this.handler) { handler.log(new LogEntry(loglevel, args)); } return this; }