Logger

A logger for collecting log entries and forwarding them to one or more handlers.

Import
the javascript logo
import { Logger } from "@schukai/monster/source/logging/logger.mjs";
Source
the git logo
Package
the npm logo
Since
1.5.0

Introduction

Logger is the central entry point for Monster logging. It turns log calls into LogEntry objects and forwards them to one or more handlers.

Core Responsibilities

SurfaceWhat it solves
addHandler()Registers a destination for structured log entries.
removeHandler()Stops a handler from receiving future entries.
logInfo(), logWarn(), ...Emit entries with explicit log levels instead of raw console calls.
getLabel() and getLevel()Translate between numeric log levels and stable labels.

Why It Matters

A logger gives application code one stable surface while handlers remain free to route the same stream to the console, telemetry, memory buffers or test doubles.

Write Entries Through A Console Handler

import { Handler } from "@schukai/monster/source/logging/handler.mjs";
import { DEBUG, INFO, Logger } from "@schukai/monster/source/logging/logger.mjs";

class MemoryHandler extends Handler {
    constructor(output) {
        super();
        this.output = output;
        this.setLogLevel(DEBUG);
    }

    log(entry) {
        if (!super.log(entry)) {
            return false;
        }

        const line = `${entry.getLogLevel()}: ${entry.getArguments().join(" ")}`;
        this.output.textContent += `${line}\n`;
        return true;
    }
}

const output = document.getElementById("logger-output");
const logger = new Logger().addHandler(new MemoryHandler(output));

document.getElementById("logger-run").addEventListener("click", () => {
    output.textContent = "";
    logger.info("Configuration loaded");
    logger.debug("Rendering diagnostics enabled");
});
Open in playground

Route The Same Log Entry Through Multiple Handlers

import { Handler } from "@schukai/monster/source/logging/handler.mjs";
import { Logger, DEBUG } from "@schukai/monster/source/logging/logger.mjs";

class BufferHandler extends Handler {
    constructor(output) {
        super();
        this.output = output;
        this.setLogLevel(DEBUG);
    }

    log(entry) {
        if (!super.log(entry)) {
            return false;
        }

        this.output.textContent += `\n${entry.getLogLevel()}:${entry.getArguments().join(" ")}`;
        return true;
    }
}

const primary = document.getElementById("logger-multiple-primary");
const secondary = document.getElementById("logger-multiple-secondary");
const logger = new Logger()
    .addHandler(new BufferHandler(primary))
    .addHandler(new BufferHandler(secondary));

document.getElementById("logger-multiple-run").addEventListener("click", () => {
    primary.textContent = "primary";
    secondary.textContent = "secondary";
    logger.logInfo({ source: "docs" }, "Provider ready");
    logger.logError({ source: "docs" }, "Socket closed");
});
Open in playground

Filter Log Output Through Handler Log Levels

import { Handler } from "@schukai/monster/source/logging/handler.mjs";
import { Logger, WARN } from "@schukai/monster/source/logging/logger.mjs";

class WarnOnlyHandler extends Handler {
    constructor(output) {
        super();
        this.output = output;
        this.setLogLevel(WARN);
    }

    log(entry) {
        if (!super.log(entry)) {
            return false;
        }
        this.output.textContent += `\n${entry.getLogLevel()}:${entry.getArguments().join(" ")}`;
        return true;
    }
}

const output = document.getElementById("logger-levels-output");
const logger = new Logger().addHandler(new WarnOnlyHandler(output));

document.getElementById("logger-levels-run").addEventListener("click", () => {
    output.textContent = "waiting";
    logger.logDebug({ source: "docs" }, "Debug");
    logger.logInfo({ source: "docs" }, "Info");
    logger.logWarn({ source: "docs" }, "Warn");
});
Open in playground

Remove A Handler And Verify That It No Longer Receives Entries

import { Handler } from "@schukai/monster/source/logging/handler.mjs";
import { Logger, DEBUG } from "@schukai/monster/source/logging/logger.mjs";

class MemoryHandler extends Handler {
    constructor(output) {
        super();
        this.output = output;
        this.setLogLevel(DEBUG);
    }

    log(entry) {
        if (!super.log(entry)) {
            return false;
        }
        this.output.textContent += `\n${entry.getArguments().join(" ")}`;
        return true;
    }
}

const output = document.getElementById("logger-remove-output");
const logger = new Logger();
const handler = new MemoryHandler(output);
logger.addHandler(handler);

document.getElementById("logger-remove-run").addEventListener("click", () => {
    output.textContent = "waiting";
    logger.logInfo({ source: "docs" }, "First pass");
    logger.removeHandler(handler);
    logger.logInfo({ source: "docs" }, "Second pass");
});
Open in playground

Exported

Logger, ALL, TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF

Derived from

Base

Options

The Options listed in this section are defined directly within the class. This class is derived from several parent classes. Therefore, it inherits Options from these parent classes. If you cannot find a specific Options in this list, we recommend consulting the documentation of the Base.

Option
Type
Default
Description
-/-

Properties

The Properties listed in this section are defined directly within the class. This class is derived from several parent classes. Therefore, it inherits Properties from these parent classes. If you cannot find a specific Properties in this list, we recommend consulting the documentation of the Base.

Methods

The methods listed in this section are defined directly within the class. This class is derived from several parent classes. Therefore, it inherits methods from these parent classes. If you cannot find a specific method in this list, we recommend consulting the documentation of the Base.

Constructor

constructor()

Behavioral methods

addHandler(handler)
Parameters
  • handler {handler}: handler
Returns
  • {Logger}
Throws
  • {Error} the handler must be an instance of Handler
removeHandler(handler)
Parameters
  • handler {handler}: handler
Returns
  • {Logger}
Throws
  • {Error} the handler must be an instance of Handler

Structural methods

getLabel(level)
Parameters
  • level {number}: level
Returns
  • {string}
Labels
getLevel(label)
Parameters
  • label {string}: label
Returns
  • {integer}
Level

Other methods

logDebug()1.5.0
Parameters
  • undefined {*}: arguments
Returns
  • {Logger}
log Debug message ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF (ALL = 0xff;OFF = 0x00;
logError()1.5.0
Parameters
  • undefined {*}: arguments
Returns
  • {Logger}
log Error message ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF (ALL = 0xff;OFF = 0x00;
logFatal()1.5.0
Parameters
  • undefined {*}: arguments
Returns
  • {Logger}
log Fatal message ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF (ALL = 0xff;OFF = 0x00;
logInfo()1.5.0
Parameters
  • undefined {*}: arguments
Returns
  • {Logger}
log Info message ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF (ALL = 0xff;OFF = 0x00;
logTrace()1.5.0
Parameters
  • undefined {*}: arguments
Returns
  • {Logger}
log Trace message ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF (ALL = 0xff;OFF = 0x00;
logWarn()1.5.0
Parameters
  • undefined {*}: arguments
Returns
  • {Logger}
log Warn message ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF (ALL = 0xff;OFF = 0x00;

Events

This component does not fire any public events. It may fire events that are inherited from its parent classes.

The current width of the area is too small to display the content correctly.