Handler

A logging handler base class for processing and exporting log entries.

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

Handler is the base contract between Logger and any concrete log destination. Use it when entries need to be filtered, reformatted or forwarded into a console bridge, a memory buffer, browser telemetry or a remote sink.

The class is intentionally small: it owns the log level threshold and the method shape, while subclasses own the side effect. That keeps custom handlers predictable and makes it easy to swap destinations without changing the logger itself.

In practice, most handlers override log(entry), call super.log(entry) as the common severity gate and only perform output work when the entry passes that guard.

Filter Log Entries Before Forwarding Them

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

class ErrorOnlyHandler extends Handler {
    constructor(output) {
        super();
        this.output = output;
        this.setLogLevel(ERROR);
    }

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

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

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

document.getElementById("handler-run").addEventListener("click", () => {
    output.textContent = "";
    logger.debug("debug message filtered");
    logger.error("error message forwarded");
});
Open in playground

Switch Handler Thresholds With The Convenience Methods

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

class SwitchingHandler extends Handler {
    constructor(output) {
        super();
        this.output = output;
        this.setError();
    }

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

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

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

const renderLevel = (label) => {
    output.textContent = `threshold: ${label}`;
};

document.getElementById("handler-level-debug").addEventListener("click", () => {
    handler.setDebug();
    renderLevel("debug");
});

document.getElementById("handler-level-error").addEventListener("click", () => {
    handler.setError();
    renderLevel("error");
});

document.getElementById("handler-level-run").addEventListener("click", () => {
    const prefix = output.textContent.split("\n")[0];
    output.textContent = prefix;
    logger.debug("debug event");
    logger.error("error event");
});
Open in playground

Forward Structured Log Entry Data Into A Custom Buffer

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

class StructuredHandler extends Handler {
    constructor(output) {
        super();
        this.output = output;
        this.entries = [];
        this.setLogLevel(INFO);
    }

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

        this.entries.push({
            level: entry.getLogLevel(),
            context: entry.getContext(),
            arguments: entry.getArguments(),
        });

        this.output.textContent = JSON.stringify(this.entries, null, 2);
        return true;
    }
}

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

document.getElementById("handler-structured-run").addEventListener("click", () => {
    output.textContent = "[]";
    logger.logInfo({ area: "docs", requestId: "req-42" }, "Saved", "Document");
});
Open in playground

Disable A Handler Completely With The Off Level

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

class ToggleHandler extends Handler {
    constructor(output) {
        super();
        this.output = output;
        this.setOff();
    }

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

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

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

document.getElementById("handler-off-enable").addEventListener("click", () => {
    handler.setInfo();
    output.textContent = "state: info";
});

document.getElementById("handler-off-disable").addEventListener("click", () => {
    handler.setOff();
    output.textContent = "state: off";
});

document.getElementById("handler-off-run").addEventListener("click", () => {
    const prefix = output.textContent.split("\n")[0];
    output.textContent = prefix;
    logger.info("release window open");
});
Open in playground

Exported

Handler

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()1.5.0
The log handler is the interface between the log entries and the log listeners.

Structural methods

getLogLevel()1.5.0
Returns
  • {integer}
get loglevel
setAll()1.5.0
Returns
  • {Handler}
Set log level to All
setDebug()1.5.0
Returns
  • {Handler}
Set log level to Debug
setError()1.5.0
Returns
  • {Handler}
Set log level to Error
setFatal()1.5.0
Returns
  • {Handler}
Set log level to Fatal
setInfo()1.5.0
Returns
  • {Handler}
Set log level to Info
setLogLevel(loglevel)1.5.0
Parameters
  • loglevel {number}: loglevel
Returns
  • {Handler}
set loglevel
setOff()1.5.0
Returns
  • {Handler}
Set log level to Off
setTrace()1.5.0
Returns
  • {Handler}
Set log level to Trace
setWarn()1.5.0
Returns
  • {undefined}
Set log level to Warn

Other methods

log(entry)
Parameters
  • entry {logentry}: entry
Returns
  • {boolean}
This is the central log function. this method must be overwritten by derived handlers with their own logic. 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.