@ahacad/logger
v0.1.1
Published
A lightweight, colorful, and feature-rich JavaScript logger
Maintainers
Readme
Logger
A lightweight, colorful, and feature-rich JavaScript logger with a beautiful interface and powerful functionality.
Features
- ✨ Multiple Log Levels: TRACE, DEBUG, INFO, WARN, ERROR, SILENT
- 🎨 Colored Output: Enhanced color support for both browsers and terminals
- 🔀 Level Filtering: Disable logs below a certain level
- 📝 Named Loggers: Support for module-specific loggers
- 💾 Level Persistence: Save settings between sessions
- ⏲ Timestamps: Configurable timestamp output
- 🔌 Formatters: Multiple output formats available
- 🚀 Lightweight & Fast: Under 5KB minified and gzipped
- 📱 Universal Support: First-class support for ESM and CommonJS
- 💻 TypeScript Ready: Comprehensive TypeScript definitions
Installation
npm install loggerQuick Start
ESM (ECMAScript Modules)
// Modern ES module import
import logger from 'logger';
// Basic usage
logger.info('Application started');
logger.warn('Configuration missing, using defaults');
logger.error('Failed to connect to database', { host: 'localhost', port: 5432 });CommonJS
// CommonJS require
const logger = require('logger');
// Basic usage
logger.info('Application started');
logger.warn('Configuration missing, using defaults');
logger.error('Failed to connect to database', { host: 'localhost', port: 5432 });Named Loggers
// Module specific logger
const apiLogger = logger.getLogger('api');
apiLogger.setLevel('debug');
apiLogger.debug('Request received', { method: 'GET', path: '/users' });
// Customize output
logger
.setLevel('info') // Only show info and above
.useColors(true) // Enable colors
.useTimestamps(true) // Show timestamps
.persist(); // Save settings to localStorage/cookiesLog Levels
The following log levels are available, in order of verbosity:
TRACE(0): Most verbose, for detailed debuggingDEBUG(1): Debug informationINFO(2): General informationWARN(3): Warnings (default level)ERROR(4): ErrorsSILENT(5): No logging
Colored Output
Logger supports colorized output across environments:
| Level | Browser | Terminal | Description | |-------|---------|----------|-------------| | TRACE | Cyan | Cyan | Detailed tracing information | | DEBUG | Green | Green | Debug-level messages | | INFO | Blue | Bright Blue | Informational messages | | WARN | Orange | Yellow | Warning messages | | ERROR | Red | Bright Red | Error messages |
Colors are automatically enabled based on environment detection and can be toggled with:
// Enable colors
logger.useColors(true);
// Disable colors
logger.useColors(false);API Reference
Logger Methods
logger.trace(...args): Log at TRACE levellogger.debug(...args): Log at DEBUG levellogger.info(...args): Log at INFO levellogger.warn(...args): Log at WARN levellogger.error(...args): Log at ERROR levellogger.log(...args): Alias for debug
Configuration
logger.setLevel(level, persist?): Set the current log levellogger.getLevel(): Get the current log level as enumlogger.getLevelName(): Get the current log level namelogger.setDefaultLevel(level): Set the default log levellogger.resetLevel(): Reset to the default log levellogger.enableAll(persist?): Enable all logging (TRACE)logger.disableAll(persist?): Disable all logging (SILENT)logger.useColors(enable): Enable or disable colorslogger.useTimestamps(enable): Enable or disable timestampslogger.persist(storage?): Enable log level persistence
Named Loggers
logger.getLogger(name): Get a named loggerlogger.getLoggers(): Get all named loggers
Formatters
logger.setFormatter(formatter): Set custom formatterlogger.getFormatter(): Get current formatter
Custom Formatters
The library includes several built-in formatters:
DefaultFormatter: Includes timestamps, log level, and logger nameMinimalFormatter: Simple prefix with just the logger nameJsonFormatter: Structured JSON output
Example:
// ESM
import logger, { JsonFormatter } from 'logger';
// CommonJS
const { default: logger, JsonFormatter } = require('logger');
// Create a JSON formatter
const jsonFormatter = new JsonFormatter();
// Use it with the logger
logger.setFormatter(jsonFormatter);
// Or with a named logger
const apiLogger = logger.getLogger('api');
apiLogger.setFormatter(jsonFormatter);You can create your own formatter by implementing the LogFormatter interface.
Module Compatibility
This logger provides first-class support for both ESM and CommonJS module systems:
ESM (ECMAScript Modules)
// Default import
import logger from 'logger';
// Named imports
import logger, { LogLevel, JsonFormatter } from 'logger';CommonJS
// Direct require (default export)
const logger = require('logger');
// Destructured require
const { default: logger, JsonFormatter } = require('logger');Browser Usage
Logger works great in browsers and includes automatic persistence using localStorage or cookies.
<script type="module">
import logger from 'logger';
logger.info('Logger loaded in browser');
// Get a module-specific logger
const uiLogger = logger.getLogger('ui');
uiLogger.debug('UI component initialized');
</script>Node.js Usage
Use the logger in Node.js applications:
// ESM
import logger from 'logger';
logger.info('Node.js application started');
// CommonJS
const logger = require('logger');
logger.info('Node.js application started');
// Named loggers work the same
const dbLogger = logger.getLogger('database');
dbLogger.info('Connected to database');Examples
Check out the included examples:
example.cjs- CommonJS exampleexample.mjs- ES Modules example
Run them with:
# Build the library first
npm run build
# Run examples
npm run example:cjs
npm run example:esmLicense
MIT
