# Quick Reference: Centralized Logging System ## 🚀 Quick Start ### In Any Page File (Admin/Store/Shop): ```javascript // 1. Use pre-configured logger (RECOMMENDED) const pageLog = window.LogConfig.loggers.yourPage; // 2. Or create custom logger const pageLog = window.LogConfig.createLogger('PAGE-NAME'); // 3. Use it pageLog.info('Page loaded'); pageLog.debug('Data:', data); pageLog.warn('Warning message'); pageLog.error('Error occurred', error); ``` --- ## đŸ“Ļ Pre-configured Loggers ### Admin Frontend ```javascript window.LogConfig.loggers.stores window.LogConfig.loggers.storeTheme window.LogConfig.loggers.products window.LogConfig.loggers.orders window.LogConfig.loggers.users window.LogConfig.loggers.dashboard window.LogConfig.loggers.imports ``` ### Store Frontend ```javascript window.LogConfig.loggers.dashboard window.LogConfig.loggers.products window.LogConfig.loggers.orders window.LogConfig.loggers.theme window.LogConfig.loggers.analytics ``` ### Shop Frontend ```javascript window.LogConfig.loggers.catalog window.LogConfig.loggers.cart window.LogConfig.loggers.checkout window.LogConfig.loggers.product ``` --- ## 🎨 Basic Logging ```javascript const log = window.LogConfig.loggers.myPage; // Simple messages log.info('Operation started'); log.warn('Slow connection detected'); log.error('Operation failed'); log.debug('Debug data:', { user: 'John', id: 123 }); // With multiple arguments log.info('User logged in:', username, 'at', timestamp); ``` --- ## đŸ”Ĩ Advanced Features ### API Call Logging ```javascript const url = '/api/stores'; // Before request window.LogConfig.logApiCall('GET', url, null, 'request'); // Make request const data = await apiClient.get(url); // After response window.LogConfig.logApiCall('GET', url, data, 'response'); ``` ### Performance Logging ```javascript const start = performance.now(); await expensiveOperation(); const duration = performance.now() - start; window.LogConfig.logPerformance('Operation Name', duration); // Output: ⚡ Operation Name took 45ms (fast) // Output: âąī¸ Operation Name took 250ms (medium) // Output: 🐌 Operation Name took 750ms (slow) ``` ### Error Logging ```javascript try { await riskyOperation(); } catch (error) { window.LogConfig.logError(error, 'Operation Context'); // Automatically logs error message and stack trace } ``` ### Grouped Logging ```javascript log.group('Loading Data'); log.info('Fetching users...'); log.info('Fetching products...'); log.info('Fetching orders...'); log.groupEnd(); ``` ### Table Logging ```javascript const users = [ { id: 1, name: 'John', status: 'active' }, { id: 2, name: 'Jane', status: 'inactive' } ]; log.table(users); ``` ### Timer Logging ```javascript log.time('Data Processing'); // ... long operation ... log.timeEnd('Data Processing'); // Output: âąī¸ [ADMIN:PAGE TIME] Data Processing: 1234.56ms ``` --- ## 📋 Complete Page Template ```javascript // static/admin/js/my-page.js // 1. Setup logger const pageLog = window.LogConfig.loggers.myPage; // 2. Create component function myPageComponent() { return { ...data(), currentPage: 'my-page', items: [], loading: false, async init() { pageLog.info('Initializing page'); // Prevent double init if (window._myPageInitialized) return; window._myPageInitialized = true; const start = performance.now(); try { pageLog.group('Loading Data'); await this.loadData(); pageLog.groupEnd(); const duration = performance.now() - start; window.LogConfig.logPerformance('Page Init', duration); pageLog.info('Page initialized successfully'); } catch (error) { window.LogConfig.logError(error, 'Page Init'); } }, async loadData() { const url = '/api/my-data'; window.LogConfig.logApiCall('GET', url, null, 'request'); const data = await apiClient.get(url); window.LogConfig.logApiCall('GET', url, data, 'response'); this.items = data; } }; } pageLog.info('Page module loaded'); ``` --- ## đŸŽ¯ Log Levels ```javascript LOG_LEVELS = { ERROR: 1, // Only errors WARN: 2, // Errors + warnings INFO: 3, // Errors + warnings + info (default) DEBUG: 4 // Everything } ``` **Auto-detected:** - `localhost` → DEBUG (4) - Production → Varies by frontend **Manual override:** ```javascript const myLog = window.LogConfig.createLogger('MY-PAGE', 4); // Force DEBUG ``` --- ## 🔍 Debugging Tips ### Check Current Config ```javascript console.log(window.LogConfig.frontend); // 'admin' | 'store' | 'shop' console.log(window.LogConfig.environment); // 'development' | 'production' console.log(window.LogConfig.logLevel); // 1 | 2 | 3 | 4 ``` ### Test Logger ```javascript const test = window.LogConfig.createLogger('TEST', 4); test.info('This is a test'); test.debug('Debug info:', { test: true }); ``` ### Enable Debug Mode ```javascript // In browser console window.LogConfig.loggers.myPage = window.LogConfig.createLogger('MY-PAGE', 4); // Now reload page to see debug logs ``` --- ## âš ī¸ Common Mistakes ### ❌ WRONG ```javascript // Old way (don't do this!) const LOG_LEVEL = 3; const log = { info: (...args) => LOG_LEVEL >= 3 && console.log(...args) }; // Wrong case ApiClient.get(url) // Should be apiClient Logger.info() // Should be window.LogConfig ``` ### ✅ CORRECT ```javascript // New way const log = window.LogConfig.loggers.myPage; // Correct case apiClient.get(url) window.LogConfig.loggers.myPage.info() ``` --- ## 🎨 Console Output Examples ### Development Mode ``` đŸŽ›ī¸ Admin Frontend Logging System Initialized Environment: Development Log Level: 4 (DEBUG) â„šī¸ [ADMIN:STORES INFO] Stores module loaded â„šī¸ [ADMIN:STORES INFO] Initializing stores page 📤 [ADMIN:API DEBUG] GET /admin/stores đŸ“Ĩ [ADMIN:API DEBUG] GET /admin/stores {data...} ⚡ [ADMIN:PERF DEBUG] Load Stores took 45ms â„šī¸ [ADMIN:STORES INFO] Stores loaded: 25 items ``` ### Production Mode (Admin) ``` đŸŽ›ī¸ Admin Frontend Logging System Initialized Environment: Production Log Level: 2 (WARN) âš ī¸ [ADMIN:API WARN] Slow API response: 2.5s ❌ [ADMIN:STORES ERROR] Failed to load store ``` --- ## 📱 Frontend Detection The system automatically detects which frontend based on URL: | URL Path | Frontend | Prefix | |----------|----------|--------| | `/admin/*` | admin | `ADMIN:` | | `/store/*` | store | `STORE:` | | `/storefront/*` | storefront | `SHOP:` | --- ## đŸ› ī¸ Customization ### Add New Pre-configured Logger Edit `log-config.js`: ```javascript const adminLoggers = { // ... existing loggers myNewPage: createLogger('MY-NEW-PAGE', ACTIVE_LOG_LEVEL) }; ``` ### Change Log Level for Frontend Edit `log-config.js`: ```javascript const DEFAULT_LOG_LEVELS = { admin: { development: LOG_LEVELS.DEBUG, production: LOG_LEVELS.INFO // Change this } }; ``` --- ## 📚 Full API Reference ```javascript window.LogConfig = { // Log levels LOG_LEVELS: { ERROR: 1, WARN: 2, INFO: 3, DEBUG: 4 }, // Current config frontend: 'admin' | 'store' | 'shop', environment: 'development' | 'production', logLevel: 1 | 2 | 3 | 4, // Default logger log: { error(), warn(), info(), debug(), group(), groupEnd(), table(), time(), timeEnd() }, // Pre-configured loggers loggers: { stores, products, orders, ... }, // Create custom logger createLogger(prefix, level?), // Utility functions logApiCall(method, url, data?, status), logError(error, context), logPerformance(operation, duration) } ``` --- ## 💡 Tips & Tricks 1. **Use Pre-configured Loggers** - Faster to write - Consistent naming - Already configured 2. **Log API Calls** - Easy to track requests - See request/response data - Debug API issues 3. **Track Performance** - Find slow operations - Optimize bottlenecks - Monitor page load times 4. **Group Related Logs** - Cleaner console - Easier to follow - Better debugging 5. **Use Debug Level in Development** - See everything - Find issues faster - Learn how code flows --- ## 📖 More Documentation - [Admin Page Templates](../admin/page-templates.md) - [Store Page Templates](../store/page-templates.md) - [Storefront Page Templates](../storefront/page-templates.md) --- **Print this page and keep it handy!** 📌 Quick pattern to remember: ```javascript const log = window.LogConfig.loggers.myPage; log.info('Hello from my page!'); ``` That's it! 🎉