Licence
MIT
Version
2.2.0
Deps
0
Size
18 kB
Vulns
0
Weekly
0
@yingyeothon/logger
Minimal structured logger with severity filtering, writer composition, and pluggable log writers. Built for tiny serverless bundles: zero dependencies, a few hundred bytes of code.
One threshold, then any number of writers; an omitted logger option becomes nullLogger.
flowchart LR
A["logger.info(message, context)"] --> F["createFilteredLogger<br/>severity threshold"]
F --> C["combine"]
C --> W1["consoleWriter"]
C --> W2["your own LogWriter"]
N["nullLogger"] -.->|"the default when logger is omitted"| A
Install
npm install @yingyeothon/logger
Usage
ESM:
import {
combine,
createConsoleLogger,
createFilteredLogger,
nullLogger,
} from "@yingyeothon/logger";
const logger = createConsoleLogger("info");
logger.debug("dropped: below severity");
logger.info("hello", { requestId: "r-1" });
logger.error("boom", new Error("bad"));
// Compose multiple writers and filter them together.
const buffered: string[] = [];
const audit = createFilteredLogger({
severity: "debug",
writer: combine(
{
debug: () => {},
info: (...a) => buffered.push(a.join(" ")),
warn: console.warn,
error: console.error,
},
nullLogger, // combine() skips the null logger
),
});
audit.info("stored");
CJS:
const { createConsoleLogger } = require("@yingyeothon/logger");
const logger = createConsoleLogger("debug");
logger.debug("visible now");
Public API
createConsoleLogger(severity?)—Loggerfiltering the console writer (default severity"info")createFilteredLogger(options)—Loggerthat writes tooptions.writeronly when the record's severity is at or above the logger's (mutable)severitycombine(...writers)— fan-out writer; skipsnullLoggerconsoleWriter—LogWriterbacked byconsole.debug/info/warn/errornullLogger— aLoggerthat drops everything- Types:
LogSeverity("none" | "debug" | "info" | "warn" | "error"),LogWriter({ debug, info, warn, error }sink interface),Logger(LogWriterplus a mutableseverityfield),FilteredLoggerOptions({ severity, writer })
Migrating from the legacy package
- The exported classes are gone:
new ConsoleLogger(severity)becomescreateConsoleLogger(severity)andnew FilteredLogger(severity, writer)becomescreateFilteredLogger({ severity, writer }). The returned objects are plainLoggervalues with the same behavior, including the mutableseverityfield. warnwas added to the contract:LogWritersinks must providedebug/info/warn/error, andLogSeveritygained"warn".- The package now ships dual ESM/CJS with types; deep imports (
@yingyeothon/logger/lib/...) are no longer supported — import everything from the package root. Logger,LogSeverity, andLogWriterare type-only exports.