Flutter Isolate Logger

A robust, isolate-based logging package for Flutter applications.

Documentation

Features

  • Multiple Outputs: Support for Console, File, and Remote (HTTP) logging.
  • Isolate-based: Heavy logging operations (like file I/O) are performed in a separate isolate to prevent UI jank.
  • Custom Formatting: From date format to full log format, everything can be customized.
  • Standard Levels: Uses the standard logging package levels. Optional error and trace stack output (use stack_trace to improve readability).

Installation

Add this to your package's pubspec.yaml file:

dependencies:
  flutter_isolate_logger:
    path: /path/to/flutter_isolate_logger

Usage

Initialization

Before using any loggers, initialize the system. This registers the worker types.

import 'package:flutter_isolate_logger/flutter_isolate_logger.dart';

void main() {
  FlutterIsolateLogger.initialize();
  // ...
}

Creating Loggers

Console Logger

final consoleLogger = ConsoleLogger();
consoleLogger.info('App started', 'Main');

File Logger

final fileLogger = FileLogger(
  logFilePath: 'path/to/app.log',
  maxFileSizeInBytes: 10 * 1024 * 1024, // 10 MB
  maxBackupFiles: 5,
);

Remote Logger

final remoteLogger = RemoteLogger(
  serverUrl: 'https://my-logs.com/api/logs',
);

Multi Logger

Combine multiple loggers:

final multiLogger = MultiLogger(
  loggers: [consoleLogger, fileLogger],
);

multiLogger.info('This goes to both console and file', 'Auth');

Logging

The loggers support standard log levels:

logger.info('Info message', 'Scope');
logger.warning('Warning message', 'Scope');
logger.severe('Error message', 'Scope', exception, stackTrace);
logger.shout('Critical message', 'Scope');

Disposal

When the app is shutting down, you can dispose of the logger system:

FlutterIsolateLogger.dispose();

Architecture

This package uses a LogDispatcher to send log commands to a background isolate. This ensures that file I/O and network requests do not block the main thread.

Benchmarks

To run the benchmarks and verify the main thread overhead:

dart run benchmark/logger_benchmark.dart

Typical results (on a development machine):

  • Simple Log: ~15 µs per log
  • Log with StackTrace: ~80 µs per log