dlog2
v0.1.2
Published
Isomorphic logging library for browser, Node, Bun and Deno
Maintainers
Readme
dlog2
Isomorphic logging library for browser, Node, Bun and Deno.
Install
npm install dlog2Quick start
import { initLogger, createLogger } from "dlog2";
// Global singleton logger
const logger = initLogger({ level: "debug" });
logger.info("app started");
// Contextual child logger with module/state tracking
const mod = createLogger("AuthModule");
mod.warn("token expired");
const http = createLogger("HTTP", ModuleState.RUNNING);
http.error("connection refused", { url: "/api/data" });API
initLogger(options?)
Creates or returns the global singleton logger.
level— log level (default:"info", env:LOG_LEVEL)transports— custom transport array (default: ConsoleTransport in dev, + FileTransport on Node)registerHandlers— attach process signal handlers (SIGINT/SIGTERM, unhandledRejection, uncaughtException)logDir— custom log directory (default:"./logs", env:LOG_DIR)
Returns a Logger instance.
createLogger(module?, state?)
Creates or returns a cached child logger from the global logger. Cached by "module:state" key.
const a = createLogger("Worker", ModuleState.RUNNING);
const b = createLogger("Worker", ModuleState.RUNNING);
a === b // true (cached)logger.child(meta)
Creates a child logger inheriting level and transports, with merged meta.
const child = logger.child({ module: "SubMod", state: ModuleState.INITIALIZING });logger.playerError(error, url?)
Logs an error with player error context. Accepts Error object or string + optional URL.
logger.playerError(new Error("timeout"));
logger.playerError("parse failed", "https://example.com/stream");Level methods
logger.error("msg", meta?);
logger.warn("msg", meta?);
logger.info("msg", meta?);
logger.debug("msg", meta?);logger.addTransport(transport)
Dynamically add a transport at runtime.
logger.end()
Finalises all transports (closes streams, etc.).
Transports
ConsoleTransport
Outputs formatted logs to console.error/warn/info/debug with ANSI colors.
import { ConsoleTransport } from "dlog2/transports/console";FileTransport
Writes logs to a file with daily rotation (%DATE% placeholder in filename) and optional level filter.
import { FileTransport } from "dlog2/transports/file";
new FileTransport({
filename: "app-%DATE%.log",
level: "error", // optional level filter
logDir: "./custom-logs", // optional custom directory
});Custom transport
import type { LogEntry, Transport } from "dlog2";
import { formatLog } from "dlog2/logger/formatters";
class MyTransport implements Transport {
log(entry: LogEntry): void {
const line = formatLog(entry, false);
// send line somewhere
}
}
initLogger({ transports: [new MyTransport()] });Configuration
| Env | Default | Description |
|-----|---------|-------------|
| LOG_LEVEL | info | Default log level |
| LOG_DIR | ./logs | Log directory for FileTransport |
| LOG_LANG | — | dayjs locale |
| DEBUG_ALL | — | Enable debug for all modules |
| DEBUG_MODULES | — | Comma-separated module names with debug enabled |
| DEBUG_EXCLUDE | — | Comma-separated module names excluded from debug |
| SHOW_SOURCE | true | Show caller file:line in warn/error entries |
