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