Examples
Flutter app logging and error handling with oleq_logs
| Pattern | When |
|---|---|
| App bootstrap | Init once in main() |
| Route observer | Log screen views |
| Global errors | Catch Flutter / platform errors |
App bootstrap
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
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