Oleqlog

Examples

Flutter app logging and error handling with oleq_logs

PatternWhen
App bootstrapInit once in main()
Route observerLog screen views
Global errorsCatch Flutter / platform errors

App bootstrap

main.dart
import 'package:flutter/material.dart';
import 'package:oleq_logs/oleq_logs.dart';

late final OleqLog log;

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();

  log = OleqLog(LoggerConfig(
    appName: 'my-mobile-app',
    environment: kReleaseMode ? 'production' : 'development',
  ));

  FlutterError.onError = (details) {
    log.error(LogPayload(
      message: details.exceptionAsString(),
      body: {'stack': details.stack.toString()},
    ));
  };

  runApp(const MyApp());
}

Flush before exit when you control lifecycle (e.g. integration tests):

await log.flush();
await log.close();

Route observer

logging_navigator_observer.dart
import 'package:flutter/material.dart';
import 'package:oleq_logs/oleq_logs.dart';

class LoggingNavigatorObserver extends NavigatorObserver {
  LoggingNavigatorObserver(this.log);

  final OleqLog log;

  @override
  void didPush(Route<dynamic> route, Route<dynamic>? previousRoute) {
    final name = route.settings.name ?? route.runtimeType.toString();
    log.info(LogPayload(message: 'screen: $name'));
  }
}

Register on MaterialApp:

MaterialApp(
  navigatorObservers: [LoggingNavigatorObserver(log)],
  // …
);

Global errors

import 'dart:async';

void main() {
  runZonedGuarded(() async {
    // … init log, runApp …
  }, (error, stack) {
    log.fatal(LogPayload(
      message: error.toString(),
      body: {'stack': stack.toString()},
    ));
    log.flush();
  });
}

Back: Usage

On this page