🚀 Better Logger
Logger avanzado para consola con estilos CSS, log context tipo MDC, transports (File / HTTP / OTLP→SigNoz), hooks, serializers y CLI integrado. Soporte dual browser/terminal.
@mks2508/better-logger cubre los dos runtimes desde un solo package: en browser emite CSS %c formatting con gradientes, sombras y badges automáticos; en terminal renderiza con colores ANSI y expone primitivas CLI (spinner, box, table, step, header). Encima del styling hay un núcleo de log context (MDC vía AsyncLocalStorage), transports con buffer acotado y retry, hooks awaited para redacción PII, serializers por tipo, y emisión alineada con OpenTelemetry (severityNumber / severityText en cada TransportRecord).
La referencia completa de la clase está en docs/api/index/classes/Logger.md.
📦 Instalación
npm install @mks2508/better-logger
# o
bun add @mks2508/better-logger
🚀 Quick Start
import logger from '@mks2508/better-logger';
logger.info('Application started');
logger.success('Database connected');
logger.warn('High memory usage');
logger.error('Connection failed');
logger.critical('Disk full');
logger.trace('verbose internals'); // filtrado por defecto (verbosity=debug)
Importar métodos sueltos
import { info, error, success, trace } from '@mks2508/better-logger';
info('Proceso iniciado');
success('✓ Completado');
✨ Features
Core
- 🎨 Estilos CSS en consola — gradientes, sombras,
%cformatting, presets listos - 🏷️ Badges — etiquetado flexible con
badges()/badge() - 🌗 Temas adaptativos — detección automática light/dark
- 🎯 TypeScript first — tipado completo, cero
anyen la superficie pública
Niveles y verbosidad
- 📊 6 niveles jerárquicos —
trace < debug < info < warn < error < critical(+silent) - 🔭
tracealineado con OpenTelemetry — severity number OTel (1-24) listo para SigNoz - 🔇 Verbosidad filtrable —
setVerbosity('warn')filtra todo por debajo
Log context (MDC)
- 🧩 Contexto estructurado —
withContext({ requestId }, () => { ... })se mergea en cadaTransportRecorddentro del scope del callback - 🧬 Loggers hijuelos —
child({ ... })hereda contexto sin mutar al padre - 🏷️ Resource OTel —
setResource({ 'service.name': ... })por logger
Transports
- 📁 File — async (
fs.promises), bounded buffer, sanitización de path, fallback alocalStorageen browser - 🌐 HTTP — batching, retry con backoff, bounded buffer (sin OOM), status check
- 🔭 OTLP → SigNoz — payload OTLP/HTTP JSON spec-compliant, ingestion key desde env var (nunca hardcodeada)
- 🧩 Custom — implementa
ITransporty registra conaddTransport()
Hooks, serializers y más
- 🪝 Hooks —
on('beforeLog', ...)(awaited, soporta redacción PII) /on('afterLog', ...) - 🔄 Middleware — pipeline
use((entry, next) => ...) - 🧬 Serializers — transforma tipos antes de loggear (
addSerializer(Error, fn)) - 🖥️ CLI integrado — spinners, boxes, tablas, steps, headers
📊 Niveles de log
trace(-1) < debug(0) < info(1) < warn(2) < error(3) < critical(4)
trace es el nivel más bajo, alineado con la banda TRACE de OpenTelemetry (severity 1-4). Cada TransportRecord incluye severityNumber y severityText OTel automáticamente.
| Nivel | Valor | Severity OTel | Uso típico |
|---|---|---|---|
trace |
-1 | TRACE (1-4) | Verbosidad máxima, internals |
debug |
0 | DEBUG (5-8) | Diagnóstico en desarrollo |
info |
1 | INFO (9-12) | Eventos informativos |
warn |
2 | WARN (13-16) | Condiciones inesperadas recuperables |
error |
3 | ERROR (17-20) | Fallos de operación |
critical |
4 | FATAL (21-24) | Errores fatales, shutdown |
import { LOG_LEVELS } from '@mks2508/better-logger';
logger.setVerbosity('debug'); // muestra trace + debug + ...
logger.setVerbosity('warn'); // solo warn, error, critical
logger.setVerbosity('silent'); // nada
success() emite a INFO severity (con styling de success y tag: 'success' en el record, para que transports distingan success de info genérico).
📚 Documentación
| Página | Contenido |
|---|---|
| Core | Clase Logger, config, scoped loggers (scope / component / api), contexto anidado |
| Context (MDC) | withContext / withContextAsync / child / setResource con AsyncLocalStorage |
| Transports | FileTransport, HttpTransport, OtlpTransport, custom ITransport, flush/shutdown |
| Hooks & Middleware | on('beforeLog') / on('afterLog') awaited, pipeline use() |
| Serializers | Transformación de tipos antes del log (addSerializer, prioridad, registry) |
| Styles | StyleBuilder, presets (cyberpunk, glassmorphism, minimal, debug), temas, toggles |
| CLI | Spinners, boxes, tablas, steps, headers para terminales Node.js |
| Playground | Demos interactivas y ejemplos ejecutables |
| Migración a v0.18 | Cambios breaking del refactor 0.18.x y guía de migración |
| API Reference | TypeDoc generado desde src/ |
🌐 Compatibilidad
- ✅ Browsers modernos — soporte completo (CSS, DevTools, localStorage fallback)
- ✅ Node.js — core + transports (File async, HTTP, OTLP)
- ✅ TypeScript — definiciones completas
- ✅ ESM & CommonJS — ambos exports