damiensmith.dev

plainlog

A small, predictable logger for Node and the browser, with explicit context, safe transports and first-class testability.

TypeScriptnpmLogging
About

What it does

Winston felt too abstract to reason about and Pino too rigid for testing, so I wrote a logger small enough to read in one sitting: no global singletons, no hidden async behaviour, and a logging failure never crashes your process.

Context is passed down explicitly with withContext and child. Logging is fire-and-forget by default with awaitable variants, every transport call has a timeout and is isolated, and errors go to a handler instead of being thrown. Buffer mode, an in-memory test mode and a sanitizer hook round it out.

Browser-safe transports (console, JSON, HTTP, in-memory) ship separately from Node-only ones (file, stream, IPC), as both ESM and CommonJS.

  • +Published on npm, now at 1.0.2
  • +One runtime dependency
  • +Works in Node 18+ and the browser