UNPKG

logstack-zee

Version:

Complete Node.js logging solution with 6 integration methods, S3 bidirectional operations, advanced analytics, and multi-cloud storage support for enterprise-scale applications.

578 lines (460 loc) 12.8 kB
# 📁 Folder Structure Configuration Guide The **logstack** package provides flexible folder organization for your log files and cloud uploads. You can configure daily, monthly, yearly structures with custom sub-folders to match your specific organizational needs. ## 🎯 Quick Overview The folder structure system allows you to: - **Organize by time**: Daily, monthly, or yearly folders - **Add sub-folders**: Hour-based, status-based, or custom processing stages - **Custom naming**: Add prefixes and suffixes to folder names - **Cloud compatibility**: Works with local storage and AWS S3 - **Production ready**: Battle-tested templates for different environments ## 📋 Basic Configuration ### Simple Daily Structure (Default) ```javascript const config = { dbUri: "mongodb://localhost:27017/logstack", uploadProvider: "local", outputDirectory: "logs", // 📁 Simple daily folders: 2024-01-15/file.json folderStructure: { type: "daily", // Creates folders like: 2024-01-15 }, }; ``` **Output Structure:** ``` logs/ ├── 2024-01-15/ ├── api_logs_2024-01-15_00-01.json ├── api_logs_2024-01-15_01-02.json └── ... ├── 2024-01-16/ └── 2024-01-17/ ``` ### Monthly Organization ```javascript const config = { folderStructure: { type: "monthly", // Creates folders like: 2024-01 }, }; ``` **Output Structure:** ``` logs/ ├── 2024-01/ ├── api_logs_2024-01-15_00-01.json ├── api_logs_2024-01-16_02-03.json └── ... ├── 2024-02/ └── 2024-03/ ``` ### Yearly Archival ```javascript const config = { folderStructure: { type: "yearly", // Creates folders like: 2024 }, }; ``` **Output Structure:** ``` logs/ ├── 2024/ ├── api_logs_2024-01-15_00-01.json ├── api_logs_2024-02-20_10-11.json └── ... ├── 2025/ └── 2026/ ``` ## 🗂️ Sub-Folder Organization ### Hour-Based Sub-Folders Perfect for debugging specific time ranges and high-frequency processing. ```javascript const config = { folderStructure: { type: "daily", subFolders: { enabled: true, byHour: true, // Creates hour-XX-XX sub-folders }, }, }; ``` **Output Structure:** ``` logs/ └── 2024-01-15/ ├── hour-00-01/ └── api_logs_2024-01-15_00-01.json ├── hour-01-02/ └── api_logs_2024-01-15_01-02.json ├── hour-14-15/ └── api_logs_2024-01-15_14-15.json └── hour-23-24/ └── api_logs_2024-01-15_23-24.json ``` ### Status-Based Sub-Folders Great for quality control and error tracking. ```javascript const config = { folderStructure: { type: "daily", subFolders: { enabled: true, byStatus: true, // Creates success/failed sub-folders }, }, }; ``` **Output Structure:** ``` logs/ └── 2024-01-15/ ├── success/ ├── api_logs_2024-01-15_00-01.json └── api_logs_2024-01-15_02-03.json └── failed/ └── api_logs_2024-01-15_01-02.json ``` ### Custom Processing Stages Ideal for multi-stage processing pipelines. ```javascript const config = { folderStructure: { type: "daily", subFolders: { enabled: true, custom: ["processed", "validated", "archived"], }, }, }; ``` **Output Structure:** ``` logs/ └── 2024-01-15/ └── processed/ └── validated/ └── archived/ └── api_logs_2024-01-15_14-15.json ``` ### Combined Sub-Folders You can combine multiple sub-folder types for maximum organization. ```javascript const config = { folderStructure: { type: "daily", subFolders: { enabled: true, byHour: true, byStatus: true, custom: ["processed"], }, }, }; ``` **Output Structure:** ``` logs/ └── 2024-01-15/ └── hour-14-15/ └── success/ └── processed/ └── api_logs_2024-01-15_14-15.json ``` ## 🏷️ Custom Naming ### Prefixes and Suffixes Add prefixes and suffixes to folder names for better organization. ```javascript const config = { folderStructure: { type: "daily", naming: { prefix: "logs", // Adds prefix suffix: "data", // Adds suffix }, }, }; ``` **Output Structure:** ``` logs/ ├── logs_2024-01-15_data/ ├── logs_2024-01-16_data/ └── logs_2024-01-17_data/ ``` ### Date Format Customization ```javascript const config = { folderStructure: { type: "monthly", naming: { dateFormat: "YYYY-MM", // Custom date format prefix: "monthly-logs", }, }, }; ``` ## 🎨 Custom Patterns For ultimate flexibility, use custom patterns. ```javascript const config = { folderStructure: { pattern: "YYYY/MM/DD", // Custom nested pattern subFolders: { enabled: true, byHour: true, }, }, }; ``` **Output Structure:** ``` logs/ └── 2024/ └── 01/ └── 15/ └── hour-14-15/ └── api_logs_2024-01-15_14-15.json ``` ## 🌍 Environment-Specific Configurations ### Development Environment ```javascript const developmentConfig = { dbUri: "mongodb://localhost:27017/logstack-dev", uploadProvider: "local", outputDirectory: "dev-logs", folderStructure: { type: "daily", subFolders: { enabled: true, byHour: true, // Helpful for debugging custom: ["debug"], // Mark as debug files }, naming: { prefix: "dev", suffix: "debug", }, }, }; ``` ### Staging Environment ```javascript const stagingConfig = { dbUri: "mongodb://localhost:27017/logstack-staging", uploadProvider: "local", outputDirectory: "staging-logs", folderStructure: { type: "daily", subFolders: { enabled: true, byHour: true, byStatus: true, // Test quality control }, naming: { prefix: "staging", }, }, }; ``` ### Production Environment ```javascript const productionConfig = { dbUri: process.env.DB_URI, uploadProvider: "s3", folderStructure: { type: "daily", subFolders: { enabled: true, byHour: true, // Time-based organization byStatus: true, // Quality control custom: ["processed", "validated"], // Processing pipeline }, naming: { dateFormat: "YYYY-MM-DD", prefix: "prod-logs", includeTime: false, }, }, s3: { bucket: "production-logs-bucket", // ... other S3 settings }, }; ``` ## 📊 Use Case Examples ### High-Volume Analytics For processing large datasets with monthly reports: ```javascript const analyticsConfig = { folderStructure: { type: "monthly", // Reduce folder count subFolders: { enabled: true, byStatus: true, // Track processing quality }, naming: { prefix: "analytics", dateFormat: "YYYY-MM", }, }, }; ``` ### Compliance & Archival For long-term storage and compliance requirements: ```javascript const complianceConfig = { folderStructure: { type: "yearly", // Long-term archival subFolders: { enabled: true, byStatus: true, // Audit trail custom: ["compliant", "reviewed"], }, naming: { prefix: "archive", dateFormat: "YYYY", }, }, }; ``` ### Debugging & Development For development and debugging scenarios: ```javascript const debugConfig = { folderStructure: { type: "daily", subFolders: { enabled: true, byHour: true, // Fine-grained time tracking custom: ["debug", "trace"], }, naming: { prefix: "debug", includeTime: true, }, }, }; ``` ## ☁️ Cloud Storage Integration The folder structure works seamlessly with cloud storage providers. ### AWS S3 Example ```javascript const s3Config = { dbUri: process.env.DB_URI, uploadProvider: "s3", folderStructure: { type: "monthly", subFolders: { enabled: true, byStatus: true, }, naming: { prefix: "logs", }, }, s3: { bucket: "my-organized-logs", region: "us-east-1", // ... other S3 settings }, }; ``` **S3 Structure:** ``` my-organized-logs/ ├── logs_2024-01/ ├── success/ ├── api_logs_2024-01-15_00-01.json └── api_logs_2024-01-15_01-02.json └── failed/ └── api_logs_2024-01-15_02-03.json └── logs_2024-02/ └── success/ └── api_logs_2024-02-01_10-11.json ``` ## 🛠️ Configuration Templates Use pre-built templates for common scenarios: ```javascript const { createFolderStructureConfig } = require("logstack"); // Simple template const simple = createFolderStructureConfig("simple"); // { type: 'daily', subFolders: { enabled: false } } // Organized template const organized = createFolderStructureConfig("organized"); // { type: 'monthly', subFolders: { enabled: true, byHour: false } } // Detailed template const detailed = createFolderStructureConfig("detailed"); // { type: 'daily', subFolders: { enabled: true, byHour: true, byStatus: true } } ``` ## 📝 Best Practices ### 1. Choose the Right Time Period - **Daily**: Best for most applications (< 1GB per day) - **Monthly**: Good for high-volume applications (1-50GB per day) - **Yearly**: For archival and compliance (long-term storage) ### 2. Sub-Folder Strategy - **byHour**: Essential for debugging and high-frequency processing - **byStatus**: Important for quality control and error tracking - **custom**: Use for multi-stage processing pipelines ### 3. Naming Conventions - Use descriptive prefixes for multi-tenant systems - Include environment in naming for staging/production separation - Keep names short but meaningful ### 4. Cloud Storage Optimization - Use monthly/yearly structures for large datasets to reduce S3 listing costs - Implement lifecycle policies based on your folder structure - Consider cross-region replication for critical data ### 5. Performance Considerations - Avoid too many nested sub-folders (max 3-4 levels) - Use month/year structures for high-volume scenarios - Consider date-based partitioning for analytics ## 🔧 Configuration Validation The system automatically validates your configuration: ```javascript const config = { folderStructure: { type: "invalid-type", // This will be caught }, }; // Valid types: 'daily', 'monthly', 'yearly' // Valid patterns: Any valid date format string ``` ## 📈 Migration Guide ### From Fixed Structure to Configurable If you're migrating from a fixed folder structure: 1. **Assess your current structure**: Identify your current organization pattern 2. **Choose equivalent config**: Map to daily/monthly/yearly types 3. **Test with sample data**: Verify the output matches expectations 4. **Gradual rollout**: Start with development environment ### Example Migration **Before** (fixed daily structure): ``` logs/2024-01-15/files... ``` **After** (configurable with sub-folders): ```javascript const config = { folderStructure: { type: "daily", // Same as before subFolders: { enabled: true, byHour: true, // New: hour organization byStatus: true, // New: quality control }, }, }; ``` ## 🚀 Getting Started 1. **Install logstack**: `npm install logstack` 2. **Choose your structure**: Start with a template or create custom 3. **Test locally**: Verify folder organization meets your needs 4. **Deploy gradually**: Start with development, then staging, then production ## 🎯 Summary The folder structure configuration system provides: - **Flexibility**: Daily, monthly, yearly, and custom patterns - **Sub-organization**: Hour, status, and custom sub-folders - **Custom naming**: Prefixes, suffixes, and date formats - **Cloud compatibility**: Works with local and S3 storage - **Production ready**: Battle-tested templates and validation - **Migration friendly**: Easy to upgrade from fixed structures Choose the configuration that best matches your use case and scale as needed!