From de61d90938db580a177ffbd6066dfb023a1a3164 Mon Sep 17 00:00:00 2001 From: Kingkor Roy Tirtho Date: Sun, 9 Jun 2024 22:58:14 +0600 Subject: [PATCH] refactor: add back exceptions to file support --- lib/services/logger/logger.dart | 36 +++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/lib/services/logger/logger.dart b/lib/services/logger/logger.dart index 1a9f3771..82708478 100644 --- a/lib/services/logger/logger.dart +++ b/lib/services/logger/logger.dart @@ -1,16 +1,23 @@ import 'dart:async'; +import 'dart:io'; import 'dart:isolate'; import 'package:flutter/foundation.dart'; import 'package:logger/logger.dart'; +import 'package:path/path.dart'; +import 'package:path_provider/path_provider.dart'; +import 'package:spotube/utils/platform.dart'; class AppLogger { static late final Logger log; + static late final File logFile; static initialize(bool verbose) { log = Logger( level: kDebugMode || (verbose && kReleaseMode) ? Level.all : Level.info, ); + + getLogsPath().then((value) => logFile = value); } static R? runZoned(R Function() body) { @@ -43,11 +50,36 @@ class AppLogger { ); } - static void reportError( + static Future getLogsPath() async { + String dir = (await getApplicationDocumentsDirectory()).path; + if (kIsAndroid) { + dir = (await getExternalStorageDirectory())?.path ?? ""; + } + + if (kIsMacOS) { + dir = join((await getLibraryDirectory()).path, "Logs"); + } + final file = File(join(dir, ".spotube_logs")); + if (!await file.exists()) { + await file.create(recursive: true); + } + return file; + } + + static Future reportError( dynamic error, [ StackTrace? stackTrace, message = "", - ]) { + ]) async { log.e(message, error: error, stackTrace: stackTrace); + + if (kReleaseMode) { + await logFile.writeAsString( + "[${DateTime.now()}]---------------------\n" + "$error\n$stackTrace\n" + "----------------------------------------\n", + mode: FileMode.writeOnlyAppend, + ); + } } }