{"_id":"@avatijs/logger","name":"@avatijs/logger","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.1":{"name":"@avatijs/logger","version":"0.1.1","description":"Logger package part of Avati project","main":"./dist/cjs/index.js","module":"./dist/esm/index.js","types":"./dist/types/index.d.ts","browser":"./dist/umd/index.js","unpkg":"./dist/umd/index.min.js","jsdelivr":"./dist/umd/index.min.js","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.js","default":"./dist/umd/index.js"},"./package.json":"./package.json"},"sideEffects":false,"engines":{"node":">=18.20.5"},"bundlesize":[{"path":"./dist/esm/index.js","maxSize":"3 kB","compression":"brotli"},{"path":"./dist/cjs/index.js","maxSize":"3 kB","compression":"brotli"},{"path":"./dist/umd/*.js","maxSize":"3 kB","compression":"brotli"}],"scripts":{"build":"npm run clean && npm run build:types && npm run build:prod","build:dev":"webpack --mode development --progress","build:prod":"webpack --mode production","build:types":"tsc --emitDeclarationOnly","watch":"webpack --mode=development --watch","watch:silent":"webpack --mode=development --watch --silent","clean":"rimraf dist","prepublishOnly":"npm run build","test":"jest --config jest.config.js","typecheck":"tsc --noEmit","size":"webpack --mode production --json > stats.json && webpack-bundle-analyzer stats.json","analyze:deps":"madge --circular --extensions ts ./src/index.ts","size:check":"bundlesize","size:watch":"bundlesize --watch","size:compression":"bundlesize --compression","check-deps":"depcheck --config .depcheckrc","analyze":"npm run analyze:size && npm run analyze:deps && npm run analyze:duplicates","analyze:size":"webpack --mode production --json > stats.json && webpack-bundle-analyzer stats.json","analyze:detailed":"webpack --config webpack.analysis.config.js","analyze:duplicates":"jscpd src","analyze:why":"webpack --mode production --display-reasons","analyze:tree":"webpack --mode production --display-used-exports","analyze:modules":"webpack --mode production --display-modules","analyze:full":"webpack --mode production --stats detailed"},"author":{"name":"Khaled Sameer","email":"khaled.smq@hotmail.com","url":"https://khaled.ee/"},"homepage":"https://avati.io/","bugs":{"url":"https://github.com/KhaledSMQ/avati/issues","email":"khaled.smq@hotmail.com"},"repository":{"type":"git","url":"git+https://github.com/KhaledSMQ/avati.git","directory":"packages/logger"},"license":"MIT","publishConfig":{"access":"public"},"keywords":["avati","logger","logging","log","debug","info","error","warn","trace","console","utility","helper","JavaScript","TypeScript","Node.js","browser","performance","monitoring","debugging","traceability","formatting","transports","middleware","customizable","structured logging","JSON log","log levels","asynchronous logging","synchronous logging","file logging","remote logging","log rotation","log management","API logging","event logging"],"devDependencies":{"@types/jest":"^29.5.14","@types/node":"^22.9.1","@typescript-eslint/eslint-plugin":"^8.15.0","@typescript-eslint/parser":"^8.15.0","bundlesize":"^0.18.2","depcheck":"^1.4.7","dependency-cruiser":"^16.6.0","eslint":"^8.57.1","jest":"^29.7.0","jscpd":"^4.0.5","madge":"^8.0.0","rimraf":"^6.0.1","source-map-explorer":"^2.5.3","terser-webpack-plugin":"^5.3.10","ts-jest":"^29.2.5","ts-loader":"^9.5.1","typescript":"^5.6.3","webpack":"^5.96.1","webpack-bundle-analyzer":"^4.10.2","webpack-cli":"^5.1.4"},"_id":"@avatijs/logger@0.1.1","gitHead":"45902cf3fc3c657b7e7d4055600c78870d4dbabb","_nodeVersion":"20.14.0","_npmVersion":"10.9.0","dist":{"integrity":"sha512-xV+gRvylbMIDvLF34PqjbWB9TDeiolI+Tbtic8Y+6MKu2lMOOBcFy0xJISN3EzrZj33iI8KqZhA03gZja/hvEA==","shasum":"d745540caaeb210ed3a9221ff485587573598240","tarball":"https://registry.npmjs.org/@avatijs/logger/-/logger-0.1.1.tgz","fileCount":21,"unpackedSize":123577,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCL3zjDbhWQDcIwswH/iLed0CH4APPfQ59ddh6LZG7zOwIhAPK38a5Dn6VkwktPJb3xAiH4iyYpSeUPnSqbv2IXZa3b"}]},"_npmUser":{"name":"khaledsqm","email":"khaled.smq@hotmail.com"},"directories":{},"maintainers":[{"name":"khaledsqm","email":"khaled.smq@hotmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/logger_0.1.1_1732354344020_0.9119440589035155"},"_hasShrinkwrap":false}},"time":{"created":"2024-11-23T09:32:23.918Z","0.1.1":"2024-11-23T09:32:24.250Z","modified":"2024-11-23T09:32:24.556Z"},"maintainers":[{"name":"khaledsqm","email":"khaled.smq@hotmail.com"}],"description":"Logger package part of Avati project","homepage":"https://avati.io/","keywords":["avati","logger","logging","log","debug","info","error","warn","trace","console","utility","helper","JavaScript","TypeScript","Node.js","browser","performance","monitoring","debugging","traceability","formatting","transports","middleware","customizable","structured logging","JSON log","log levels","asynchronous logging","synchronous logging","file logging","remote logging","log rotation","log management","API logging","event logging"],"repository":{"type":"git","url":"git+https://github.com/KhaledSMQ/avati.git","directory":"packages/logger"},"author":{"name":"Khaled Sameer","email":"khaled.smq@hotmail.com","url":"https://khaled.ee/"},"bugs":{"url":"https://github.com/KhaledSMQ/avati/issues","email":"khaled.smq@hotmail.com"},"license":"MIT","readme":"# Browser Console Logger\n\nA lightweight, TypeScript-based logging utility designed for browser environments with advanced debugging capabilities. This logger provides structured console output, debug grouping, performance tracking, and hierarchical logging support.\n\n## Features\n\n- 🎯 **Focused on Browser Console**: Optimized for browser development and debugging\n- 📊 **Multiple Log Levels**: ERROR, WARN, INFO, and DEBUG\n- 🔍 **Debug Mode**: Enhanced debugging features with grouping and performance tracking\n- ⚡ **Performance Optimized**: Minimal overhead and conditional logging\n- 📱 **Module Support**: ESM and TypeScript support\n- 👥 **Hierarchical Logging**: Support for child loggers with prefixes\n- ⏱️ **Performance Tracking**: Built-in timing functionality for debugging\n- 🎨 **Customizable**: Configurable timestamps, prefixes, and debug modes\n\n## Installation\n\n```bash\nnpm install @avatijs/logger\n# or\nyarn add @avati/logger\n```\n\n## Quick Start\n\n```typescript\nimport { ConsoleLogger } from '@avatijs/logger';\n\n// Create logger instance\nconst logger = ConsoleLogger.getInstance({\n    level: 'DEBUG',\n    debugMode: true,\n    enableTimestamp: true,\n    prefix: 'APP'\n});\n\n// Basic logging\nlogger.info('Application started');\nlogger.warn('High memory usage', { usage: '85%' });\nlogger.error('Failed to fetch data', new Error('Network error'));\nlogger.debug('Request details', { url: '/api/data' });\n```\n\n## Usage Examples\n\n### Basic Configuration\n\n```typescript\nconst logger = ConsoleLogger.getInstance({\n    level: 'INFO',        // Minimum log level to output\n    debugMode: true,      // Enable debug features\n    enableTimestamp: true, // Include timestamps in logs\n    enablePerformance: true, // Enable performance tracking\n    prefix: 'MyApp'       // Global prefix for all logs\n});\n```\n\n### Debug Groups\n\n```typescript\nlogger.group('API Request');\nlogger.debug('Preparing request');\nlogger.debug('Sending data', { payload: data });\nlogger.debug('Processing response');\nlogger.groupEnd('API Request');\n```\n\n### Performance Tracking\n\n```typescript\nlogger.time('dataProcessing');\n// ... some operations\nlogger.timeEnd('dataProcessing'); // Outputs: \"dataProcessing: 123.45ms\"\n```\n\n### Child Loggers\n\n```typescript\n// Create module-specific loggers\nconst authLogger = logger.createChildLogger('AUTH');\nconst apiLogger = logger.createChildLogger('API');\n\nauthLogger.info('User logged in'); // Output: \"[AUTH] User logged in\"\napiLogger.debug('Request sent');   // Output: \"[API] Request sent\"\n```\n\n### Advanced Debugging\n\n```typescript\n// Enable debug mode with performance tracking\nconst logger = ConsoleLogger.getInstance({\n    level: 'DEBUG',\n    debugMode: true,\n    enablePerformance: true\n});\n\nlogger.group('Data Processing');\nlogger.time('process');\n\nlogger.debug('Starting processing');\n// ... processing logic\nlogger.debug('Processing complete');\n\nlogger.timeEnd('process');\nlogger.groupEnd('Data Processing');\n```\n\n## API Reference\n\n### Configuration Options\n\n```typescript\ninterface LoggerConfig {\n    level: 'ERROR' | 'WARN' | 'INFO' | 'DEBUG';\n    enableTimestamp: boolean;\n    debugMode: boolean;\n    enablePerformance: boolean;\n    prefix?: string;\n}\n```\n\n### Methods\n\n#### Core Logging Methods\n\n- `error(message: string, ...args: unknown[]): void`\n- `warn(message: string, ...args: unknown[]): void`\n- `info(message: string, ...args: unknown[]): void`\n- `debug(message: string, ...args: unknown[]): void`\n\n#### Debug Tools\n\n- `group(label: string): void` - Starts a collapsible debug group\n- `groupEnd(label: string): void` - Ends a debug group\n- `time(label: string): void` - Starts a performance timer\n- `timeEnd(label: string): void` - Ends and logs a performance timer\n- `clear(): void` - Clears the console\n\n#### Utility Methods\n\n- `createChildLogger(prefix: string): ConsoleLogger` - Creates a new logger instance with a prefix\n- `updateConfig(config: Partial<LoggerConfig>): void` - Updates logger configuration\n\n### Log Levels\n\n```typescript\nenum LogLevel {\n    ERROR = 0,  // Critical errors\n    WARN = 1,   // Warning messages\n    INFO = 2,   // General information\n    DEBUG = 3   // Debug information\n}\n```\n\n## Best Practices\n\n1. **Log Level Selection**\n    - Use ERROR for unrecoverable errors\n    - Use WARN for recoverable issues\n    - Use INFO for significant events\n    - Use DEBUG for development details\n\n2. **Debug Groups**\n    - Group related debug messages\n    - Use meaningful group labels\n    - Don't forget to close groups\n\n3. **Performance Tracking**\n    - Use time/timeEnd for critical operations\n    - Keep labels consistent\n    - Clean up timers when done\n\n4. **Child Loggers**\n    - Create separate loggers for different modules\n    - Use descriptive prefixes\n    - Maintain consistent naming\n\n## Framework Integration\n\n### React Example\n\n```typescript\n// logger.ts\nexport const logger = ConsoleLogger.getInstance({\n    level: process.env.NODE_ENV === 'production' ? 'ERROR' : 'DEBUG',\n    debugMode: process.env.NODE_ENV !== 'production',\n    prefix: 'React'\n});\n\n// component.tsx\nimport { logger } from './logger';\n\nconst MyComponent: React.FC = () => {\n    const componentLogger = logger.createChildLogger('MyComponent');\n    \n    useEffect(() => {\n        componentLogger.debug('Component mounted');\n        return () => componentLogger.debug('Component unmounted');\n    }, []);\n\n    return <div>My Component</div>;\n};\n```\n\n\n## Changelog\n\nPlease see [CHANGELOG](./CHANGELOG.md) for more information what has changed recently.\n\n## Contributing\n\nI welcome contributions from developers of all experience levels. If you have an idea, found a bug, or want to improve something, I encourage you to get involved!\n\n### How to Contribute\n1. Read [Contributing Guide](https://github.com/KhaledSMQ/avati/blob/master/Contributing.md) for details on how to get started.\n2. Fork the repository and make your changes.\n3. Submit a pull request, and we’ll review it as soon as possible.\n\n## License\n\n[![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/KhaledSMQ/avati/blob/master/LICENSE)\n\nAvati is open-source and distributed under the [MIT License](https://github.com/KhaledSMQ/avati/blob/master/LICENSE).\n\n---\n<div align=\"center\">\n\n[![Follow on Twitter](https://img.shields.io/twitter/follow/KhaledSMQ.svg?style=social)](https://x.com/khaledsmq_)\n[![Follow on LinkedIn](https://img.shields.io/badge/LinkedIn-Connect-blue.svg)](https://www.linkedin.com/in/khaledsmq/)\n[![Follow on Medium](https://img.shields.io/badge/Medium-Follow-black.svg)](https://medium.com/@khaled.smq)\n[![Made with ❤️](https://img.shields.io/badge/Made%20with-❤️-red.svg)](https://github.com/KhaledSMQ)\n[![Star on GitHub](https://img.shields.io/github/stars/KhaledSMQ/avati.svg?style=social)](https://github.com/KhaledSMQ/avati/stargazers)\n[![Follow on GitHub](https://img.shields.io/github/followers/KhaledSMQ.svg?style=social&label=Follow)](https://github.com/KhaledSMQ)\n\n</div>\n","readmeFilename":"README.md"}