@asd14/fancy-logger
v1.0.0
Published
Fancy console logger for Node.js and browser
Readme
@asd14/fancy-logger
Fancy console logger for Node.js and browser.
- Runtime-specific entrypoints:
@asd14/fancy-logger/nodeand@asd14/fancy-logger/browser - Two output formats: colored text for humans, JSON for log pipelines
- Level gating:
error,warning,info,debug - Variable redaction hook: redact variables before they leave your process
- Node.js extras: animated spinner and
tadaabanner
Install
# Node apps (with spinner)
npm install @asd14/fancy-logger yocto-spinner
# Frontend apps
npm install @asd14/fancy-loggerNode runtime requirement: >=22.12.0.
[!NOTE]
yocto-spinneris an optional peer dependency used only by@asd14/fancy-logger/nodeforlogger.spinner.
Use cases
Node logs
import { buildLogger } from "@asd14/fancy-logger/node"
const logger = buildLogger({
namespace: "api",
level: process.env["LOG_LEVEL"] === "debug" ? "debug" : "info",
format: process.env["LOG_FORMAT"] === "json" ? "json" : "text",
output: "stderr",
})
logger.info("Request received", { method: "GET", path: "/users" })
logger.error("Request failed", { status: 500, reason: "timeout" })Long-running tasks (spinner)
import { buildLogger } from "@asd14/fancy-logger/node"
const logger = buildLogger({ namespace: "sync", level: "info" })
const task = logger.spinner.start("Sync users", { batch: 1 }, { total: 3 })
task.tick({ id: "user-1" })
task.tick({ id: "user-2" })
task.stop("done")
logger.tadaa({
title: "Sync complete",
message: "3 users synced",
note: "No retries",
})Browser logs
import { buildLogger } from "@asd14/fancy-logger/browser"
const logger = buildLogger({ namespace: "web/app", level: "info" })
logger.info("Loaded", { route: "/home" })
logger.tadaa({ title: "Session ready", message: "MCP connected" })API
buildLogger
Import buildLogger from the runtime you need:
import { buildLogger } from "@asd14/fancy-logger/node"
// or
import { buildLogger } from "@asd14/fancy-logger/browser"- Node entrypoint: build a Node logger with text or JSON output, a
tadaabanner, and a spinner. - Browser entrypoint: build a browser logger with text or JSON output.
Parameters
| Name | Type | Required | Default (node) | Default (browser) |
| ------------ | ----------------------------------------------------------------------- | -------- | ------------------------------------- | ----------------- |
| namespace | string | yes | - | - |
| level | "error" \| "warning" \| "info" \| "debug" | no | process.env["LOG_LEVEL"] ?? "info" | "info" |
| format | "text" \| "json" | no | process.env["LOG_FORMAT"] ?? "text" | "text" |
| output | "stderr" \| "stdout" | no | "stderr" | "stdout" |
| redactor | (input: Record<PropertyKey, unknown>) => Record<PropertyKey, unknown> | no | undefined | undefined |
| thresholds | { good: number; meh: number } | no | { good: 100, meh: 500 } | - |
Returns
error(message, variables?)warn(message, variables?)info(message, variables?)success(message, variables?)debug(message, variables?)tadaa({ title, message?, note? })
Only on logger built from @asd14/fancy-logger/node:
spinnerstart(message, variables?, { total? }), returns a handle with:tick(variables?)stop(message, variables?)stopError(message, variables?)stopWarn(message, variables?)
Develop
npm run lint
npm run typecheck
npm run unit-test
npm run buildChangelog
See releases.
