Flutter Live Logger

pub package License: MIT

Production-ready real-time logging solution for Flutter applications

Flutter Live Logger is a comprehensive logging library designed for Flutter apps in production. It provides multiple transport layers, persistent storage, automatic navigation tracking, and offline support with a clean, developer-friendly API.

πŸ“– Languages: English β€’ ν•œκ΅­μ–΄


✨ Features

🎯 Core Capabilities

  • πŸš€ High Performance: 400,000+ logs/second throughput
  • 🌐 Cross-Platform: iOS, Android, Web, macOS, Windows, Linux
  • πŸ”₯ Multiple Transport Layers: Memory, File, HTTP transport options
  • πŸ’Ύ Persistent Storage: SQLite and memory-based storage with querying
  • πŸ“± Auto Navigation Tracking: Automatic screen transition logging
  • πŸ”„ Offline Support: Queue logs offline and sync when connected
  • ⚑ Smart Batching: Configurable batching for efficiency
  • πŸŽ›οΈ Configurable: Multiple environment configurations (dev/prod/test)

πŸ› οΈ Developer Experience

  • ⚑ Easy Setup: Initialize with one line of code
  • πŸ“š Complete API: Comprehensive dartdoc documentation
  • πŸ”’ Type Safe: Full null safety and strong typing
  • πŸ§ͺ Well Tested: 95%+ test coverage with 35+ comprehensive tests
  • 🌍 Cross Platform: iOS, Android, Web, Desktop support

πŸš€ Quick Start

1. Add Dependency

dependencies:
  flutter_live_logger: ^0.2.0

2. Initialize the Logger

import 'package:flutter_live_logger/flutter_live_logger.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // Initialize with transports
  await FlutterLiveLogger.init(
    config: LoggerConfig(
      logLevel: LogLevel.debug,
      environment: 'development',
      transports: [
        MemoryTransport(maxEntries: 1000),
        HttpTransport(
          config: HttpTransportConfig.withApiKey(
            endpoint: 'https://your-api.com/logs',
            apiKey: 'your-api-key',
          ),
        ),
      ],
    ),
  );
  
  runApp(MyApp());
}

3. Add Navigation Tracking

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'My App',
      navigatorObservers: [
        FlutterLiveLoggerNavigatorObserver(
          enableDurationTracking: true,
          enableBreadcrumbs: true,
        ),
      ],
      home: HomeScreen(),
    );
  }
}

4. Start Logging

class HomeScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Flutter Live Logger Demo')),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            // Simple logging
            FlutterLiveLogger.info('User clicked button');
            
            // Event tracking with structured data
            FlutterLiveLogger.event('button_click', {
              'button_id': 'main_cta',
              'screen': 'home',
              'timestamp': DateTime.now().toIso8601String(),
            });
            
            // Error logging with context
            try {
              throw Exception('Demo error');
            } catch (error, stackTrace) {
              FlutterLiveLogger.error(
                'Operation failed',
                data: {'operation': 'demo'},
                error: error,
                stackTrace: stackTrace,
              );
            }
          },
          child: Text('Test Logging'),
        ),
      ),
    );
  }
}

πŸ“– Advanced Usage

Configuration Options

// Development Configuration
await FlutterLiveLogger.init(
  config: LoggerConfig(
    logLevel: LogLevel.debug,
    environment: 'development',
    enableOfflineSupport: true,
    transports: [
      MemoryTransport(maxEntries: 1000),
      HttpTransport(
        config: HttpTransportConfig.withApiKey(
          endpoint: 'https://api.example.com/logs',
          apiKey: 'dev-api-key',
        ),
      ),
    ],
  ),
);

// Production Configuration  
await FlutterLiveLogger.init(
  config: LoggerConfig(
    logLevel: LogLevel.info,
    environment: 'production',
    enableOfflineSupport: true,
    batchSize: 50,
    flushInterval: Duration(seconds: 10),
    transports: [
      HttpTransport(
        config: HttpTransportConfig.withApiKey(
          endpoint: 'https://api.example.com/logs',
          apiKey: 'prod-api-key',
          batchSize: 50,
          timeout: Duration(seconds: 30),
          maxRetries: 3,
        ),
      ),
      FileTransport(
        config: FileTransportConfig(
          directory: '/app/logs',
          maxFileSize: 10 * 1024 * 1024, // 10MB
          maxFiles: 5,
        ),
      ),
    ],
  ),
);

Transport Layers

// Memory Transport (for development/testing)
final memoryTransport = MemoryTransport(
  maxEntries: 1000,
);

// File Transport (for local persistence)
final fileTransport = FileTransport(
  config: FileTransportConfig(
    directory: '/app/logs',
    filePrefix: 'app_log',
    maxFileSize: 10 * 1024 * 1024, // 10MB
    maxFiles: 5,
    enableRotation: true,
  ),
);

// HTTP Transport (for remote logging with full web support)
final httpTransport = HttpTransport(
  config: HttpTransportConfig.withApiKey(
    endpoint: 'https://api.example.com/logs',
    apiKey: 'your-api-key',
    batchSize: 10,
    timeout: Duration(seconds: 30),
    maxRetries: 3,
  ),
);

Storage Options

// Memory Storage (fast, non-persistent)
final memoryStorage = MemoryStorage(maxEntries: 10000);

// SQLite Storage (persistent, queryable)
final sqliteStorage = SQLiteStorage(
  path: 'app_logs.db',
  maxEntries: 100000,
);

🌐 Web Platform Support

Flutter Live Logger fully supports web platforms with CORS-enabled HTTP transport:

// Works seamlessly on web
HttpTransport(
  config: HttpTransportConfig.withApiKey(
    endpoint: 'https://api.example.com/logs',
    apiKey: 'your-key',
  ),
)

Note: Server must have proper CORS headers configured:

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: Origin, Content-Type, X-API-Key

πŸ“Š Performance Benchmarks

Benchmarked performance metrics:

  • Throughput: 434,783 logs/second
  • Initialization: <50ms startup time
  • Memory: <10MB peak usage
  • Cross-platform: Consistent performance across all platforms

πŸ“Š Dashboard Integration

For real-time monitoring and analytics, use the companion dashboard:

dev_dependencies:
  flutter_live_logger_dashboard: ^0.2.0

πŸ“± Platform Support

Platform Support Notes
iOS βœ… Full support
Android βœ… Full support
Web βœ… CORS required for HTTP transport
macOS βœ… Full support
Windows βœ… Full support
Linux βœ… Full support

πŸ§ͺ Testing

The package includes comprehensive test coverage:

flutter test

Test Results: 35/35 tests passing (100%)

πŸ“š Examples

Check out the example app for a complete implementation showing:

  • Basic logging setup
  • HTTP transport configuration (web compatible)
  • Navigator observation
  • Error handling
  • Performance monitoring

🀝 Contributing

We welcome contributions! Please see our Contributing Guide for details.

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

πŸ“ž Support

Libraries

flutter_live_logger
Flutter Live Logger - Real-time logging solution for Flutter applications