From 67f14d6cece684b93b8c190f5d4261965e6f8f83 Mon Sep 17 00:00:00 2001 From: qzl Date: Wed, 1 Apr 2026 14:18:22 +0800 Subject: [PATCH] feat(logging): add global error handler --- apps/lib/core/logging/error_handler.dart | 18 ++++++++++++++++++ apps/lib/main.dart | 13 +++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 apps/lib/core/logging/error_handler.dart diff --git a/apps/lib/core/logging/error_handler.dart b/apps/lib/core/logging/error_handler.dart new file mode 100644 index 0000000..85ca334 --- /dev/null +++ b/apps/lib/core/logging/error_handler.dart @@ -0,0 +1,18 @@ +import 'package:flutter/foundation.dart'; +import 'logger.dart'; + +class AppErrorHandler { + final Logger _logger = getLogger('flutter.error'); + + void register() { + FlutterError.onError = (details) { + _logger.error( + message: 'FlutterError: ${details.exceptionAsString()}', + error: details.exceptionAsString(), + stackTrace: details.stack ?? StackTrace.current, + extra: {'context': 'FlutterError.onError'}, + ); + FlutterError.presentError(details); + }; + } +} diff --git a/apps/lib/main.dart b/apps/lib/main.dart index 82399c6..f3f19a6 100644 --- a/apps/lib/main.dart +++ b/apps/lib/main.dart @@ -1,12 +1,25 @@ import 'package:flutter/material.dart'; import 'core/config/env.dart'; +import 'core/logging/logger.dart'; +import 'core/logging/log_service.dart'; +import 'core/logging/error_handler.dart'; import 'app/di/injection.dart'; import 'app/app.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); + + final logService = await LogService.create(); + Logger.setLogService(logService); + + AppErrorHandler().register(); + await configureDependencies(); await Env.init(); + getLogger( + 'app', + ).info(message: 'App starting...', extra: {'version': Env.version}); + runApp(const LinksyApp()); }