UNPKG

snaplogx

Version:

A high-performance logging library with advanced filtering algorithms

202 lines (147 loc) 6.75 kB
# SnapLog A high-performance logging library for Node.js with advanced pattern-matching filters. ## Motivation SnapLog is built for speed and precision in logging, targeting applications that demand real-time, high-volume log processing. It uses optimized **Knuth-Morris-Pratt (KMP)** for single-pattern filtering and **Aho-Corasick** for multi-pattern filtering, offering a lightweight alternative to traditional loggers like Winston. With a focus on performance and flexibility, SnapLog supports file-based logging with customizable filters and processors, making it extensible for diverse use cases. ## Quick Start Install SnapLog and start logging with a simple setup: ```bash npm install snaplogx ``` ```javascript import { createLogger } from 'snaplogx'; const logger = createLogger({ fileOptions: { filename: 'app.log', format: 'json', logDir: './logs' } }); logger.info('App started'); ``` See more examples in `./perf/` for performance demos or contribute your own! ## Usage Create a logger instance with `createLogger` to leverage SnapLog’s features: ```javascript import { createLogger } from 'snaplogx'; const logger = createLogger({ fileOptions: { filename: 'app.log', format: 'text', logDir: './logs' } }); // Basic logging logger.info('Server running'); logger.error('Connection issue'); // Single-pattern filter with KMP logger.addPatternFilter('no-errors', 'error', false); logger.info('Database online'); // Logged logger.error('Query error'); // Filtered // Multi-pattern filter with Aho-Corasick logger.addMultiPatternFilter('errors-only', ['timeout', 'failed'], true); logger.info('Task completed'); // Filtered logger.error('Request timeout'); // Logged // Add a processor logger.addProcessor('timestamp', (info) => { info.timestamp = new Date().toISOString(); }); // Switch file logger.setFile({ filename: 'errors.log' }); logger.error('Task failed'); // Logged to errors.log ``` ## Features - **High Performance**: Buffered file output for minimal overhead. - **KMP Filtering**: Fast single-pattern matching with cached LPS arrays. - **Aho-Corasick Filtering**: Efficient multi-pattern matching in one pass. - **Customizable Output**: JSON or text format, configurable file locations. - **Processors**: Transform logs before writing with custom functions. - **Chainable API**: Fluent method calls for easy setup. ## API Create a logger with `createLogger`: ```javascript const logger = createLogger({ fileOptions: { filename: 'logs.log', format: 'json', logDir: './logs' } }); ``` | Method | Description | Parameters | |-------------------------------------|--------------------------------------------|------------| | `logger.log(level, message, [meta])` | Logs a message with optional metadata. | `level`: string, `message`: string, `meta`: object (optional) | | `logger.<level>(message, [meta])` | Shorthand for levels (e.g., info, error). | `message`: string, `meta`: object (optional) | | `logger.addPatternFilter(name, pattern, allow)` | Adds a KMP filter. | `name`: string, `pattern`: string, `allow`: boolean (default: true) | | `logger.addMultiPatternFilter(name, patterns, allow)` | Adds an Aho-Corasick filter. | `name`: string, `patterns`: string[], `allow`: boolean (default: true) | | `logger.removeFilter(name)` | Removes a filter by name. | `name`: string | | `logger.setFile(options)` | Updates the output file configuration. | `options`: { filename?, format?, logDir? } | | `logger.addProcessor(name, fn)` | Adds a processor to transform logs. | `name`: string, `fn`: (info) => void | | `logger.removeProcessor(name)` | Removes a processor by name. | `name`: string | ## Configuration Options for `createLogger`: | Option | Default | Description | |----------------------|-------------|--------------------------------------------| | `fileOptions.filename` | `'app.log'` | Name of the output log file. | | `fileOptions.format` | `'json'` | Log format ('json' or 'text'). | | `fileOptions.logDir` | `'./logs'` | Directory for log files (created if missing). | ## Logging Levels SnapLog uses a simple level system (customizable via `constants.js`): ```javascript const levels = { error: 0, warn: 1, info: 2, debug: 3 }; ``` Level-specific methods (e.g., `logger.info`, `logger.error`) are auto-generated. ## Prerequisites - **Node.js**: v16+ (v18+ recommended) - **npm**: For installation ## Development Setup Clone the repo: ```bash git clone https://github.com/NirbhayMeghpara/SnapLog.git cd snaplog ``` Install dependencies: ```bash npm install ``` Run tests: ```bash npm run test ``` Explore performance demos: ```bash npm run perf:generate # Generate test logs npm run perf:benchmark # Run benchmarks ``` ## Contributing SnapLog is open-source and welcomes contributions! Whether you’ve spotted a bug, have a feature idea, or want to make improvements, we’d love to hear from you. Here’s how you can contribute: 1. **Report an Issue** Found a bug or have a feature suggestion? [Create a new issue](https://github.com/NirbhayMeghpara/SnapLog/issues) with a clear description. Feel free to label it appropriately (`bug`, `enhancement`, etc.). 2. **Discuss a Feature** If you have an idea and would like to collaborate or need clarification, don’t hesitate to [connect with me](mailto:nirbhaymeghpara123@gmail.com) directly or open a discussion/issue. I’m happy to brainstorm and build great features together. 3. **Contribute Code** - Fork the repository - Create your feature branch: ```bash git checkout -b feature/your-feature-name ``` - Commit your changes: ```bash git commit -m "Add: your message" ``` - Push to the branch: ```bash git push origin feature/your-feature-name ``` - Submit a pull request on GitHub 4. **Guidelines** - Include relevant unit tests for any new features or fixes. - Follow the existing coding style and structure. - Keep pull requests focused and well-documented. - Update documentation if your changes affect usage or behavior. --- Looking forward to your contributions! 🚀 ## Why SnapLog? SnapLog prioritizes performance with optimized algorithms, offering faster filtering and logging than traditional tools, perfect for real-time, high-throughput applications. ## License This project is licensed under the MIT License - see the [LICENSE](https://github.com/NirbhayMeghpara/SnapLog/blob/main/LICENSE) file for details.