Handler
A logging handler base class for processing and exporting log entries.
import { Handler } from "@schukai/monster/source/logging/handler.mjs";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");
});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");
});threshold: error
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");
});[]
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");
});state: off
Exported
HandlerDerived from
BaseOptions
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.
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.0Structural methods
getLogLevel()1.5.0- {integer}
setAll()1.5.0- {Handler}
setDebug()1.5.0- {Handler}
setError()1.5.0- {Handler}
setFatal()1.5.0- {Handler}
setInfo()1.5.0- {Handler}
setLogLevel(loglevel)1.5.0loglevel{number}: loglevel
- {Handler}
setOff()1.5.0- {Handler}
setTrace()1.5.0- {Handler}
setWarn()1.5.0- {undefined}
Other methods
log(entry)entry{logentry}: entry
- {boolean}
Events
This component does not fire any public events. It may fire events that are inherited from its parent classes.