DEV Community

Sanjeev
Sanjeev

Posted on

I got tired of re-installing 6 logging packages in every project, so I built one that ships complete

Every new Node project, the same ritual:

npm install pino pino-pretty pino-roll pino-redact pino-nestjs pino-http
Enter fullscreen mode Exit fullscreen mode

Then you wire up 4 config objects. Then you discover there's no built-in database transport. Then request tracing turns out to be manual. Then — under real I/O pressure — your logger is blocking the event loop.

I did this enough times that I built the thing I kept wishing existed: logixia — an async-first TypeScript logger that ships complete.

npm install logixia
Enter fullscreen mode Exit fullscreen mode

One install gives you: console + file rotation + database transports + request tracing + a NestJS module + field redaction + log search + OpenTelemetry + a plugin API + Prometheus metrics + a visual TUI log explorer — and every transport is non-blocking.

The 30-second version

import { createLogger } from 'logixia';

const logger = createLogger({
  appName: 'api',
  environment: 'production',
  transports: {
    console: { format: 'json' },
    file: { filename: 'app.log', dirname: './logs', maxSize: '50MB' },
    database: { type: 'postgresql', host: 'localhost', database: 'appdb', table: 'logs' },
  },
});

await logger.info('Server started', { port: 3000 });
// Writes to console + file + postgres simultaneously. Non-blocking. Done.
Enter fullscreen mode Exit fullscreen mode

No try/catch needed — a flaky DB or disk-full condition never crashes your app; transport errors are swallowed internally.

Why I went "batteries-included"
console.log doesn't scale. pino is fast but leaves database persistence, NestJS integration, log search, and redaction to plugins. winston is flexible but synchronous and boilerplate-heavy.

logixia's bet: everything ships built-in, and nothing blocks your event loop.

A few of the things that come in the box:

  1. Async by design — every log call is non-blocking, even to file and DB transports
  2. Built-in database transports — PostgreSQL, MySQL, MongoDB, SQLite
  3. Cloud adapters — AWS CloudWatch (with EMF metrics), GCP Logging, Azure Monitor
  4. NestJS module — LogixiaLoggerModule.forRoot(), inject anywhere, @LogMethod() for auto entry/exit logging
  5. Request tracing — AsyncLocalStorage-based trace propagation, no manual context threading
  6. Correlation ID propagation — auto-forward X-Correlation-ID through fetch, axios, Kafka, SQS
  7. Field redaction — mask passwords/tokens/PII before they touch any transport (dot-paths + regex)
  8. Browser/Edge/Bun/Deno — tree-shakeable logixia/browser entry, zero Node built-ins
  9. Prometheus metrics — turn log events into counters/histograms/gauges, expose /metrics
  10. Visual TUI explorer — logixia explore opens a full-screen terminal log browser with real-time search

"But is it actually fast?"

Fair question for an async-first logger. Benchmarked against pino, winston, and bunyan (all writing to /dev/null, Node 20, Apple M-series; ops/sec, higher is better):

logixia beats pino on 5 of 6 scenarios — including +114% on error logging and +58% on high-cardinality — the shapes that dominate real production traffic. It beats winston and bunyan across the board, often 2–3×, while keeping p99 latency at 1–3µs with no tail spikes.

pino still wins the trivial simple-string case (−14%) because it writes synchronously straight to process.stdout — fast in a microbenchmark, but it blocks the event loop under real I/O. logixia stays non-blocking and pulls ahead the moment you log anything structured.

(Reproduce with npm run benchmark.)

Try it

npm install logixia
Enter fullscreen mode Exit fullscreen mode

📦 npm: https://www.npmjs.com/package/logixia
⭐ GitHub: https://github.com/Logixia/logixia

It's MIT, TypeScript-first, Node 18+. I'm building in public — if you try it, I'd genuinely love to know what you'd want a logger to do that none of them do today. That's how the next version gets shaped.

Top comments (0)