Every new Node project, the same ritual:
npm install pino pino-pretty pino-roll pino-redact pino-nestjs pino-http
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
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.
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:
- Async by design — every log call is non-blocking, even to file and DB transports
- Built-in database transports — PostgreSQL, MySQL, MongoDB, SQLite
- Cloud adapters — AWS CloudWatch (with EMF metrics), GCP Logging, Azure Monitor
- NestJS module — LogixiaLoggerModule.forRoot(), inject anywhere, @LogMethod() for auto entry/exit logging
- Request tracing — AsyncLocalStorage-based trace propagation, no manual context threading
- Correlation ID propagation — auto-forward X-Correlation-ID through fetch, axios, Kafka, SQS
- Field redaction — mask passwords/tokens/PII before they touch any transport (dot-paths + regex)
- Browser/Edge/Bun/Deno — tree-shakeable logixia/browser entry, zero Node built-ins
- Prometheus metrics — turn log events into counters/histograms/gauges, expose /metrics
- 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
📦 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)