Added raw-failure logs to flutter app (to debug init errors)
This commit is contained in:
@@ -1,6 +1,11 @@
|
||||
import 'dart:convert';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:hive_flutter/hive_flutter.dart';
|
||||
import 'package:simplecloudnotifier/state/globals.dart';
|
||||
import 'package:simplecloudnotifier/state/interfaces.dart';
|
||||
import 'package:xid/xid.dart';
|
||||
import 'package:path/path.dart' as path;
|
||||
|
||||
part 'application_log.g.dart';
|
||||
|
||||
@@ -76,6 +81,61 @@ class ApplicationLog {
|
||||
trace: trace?.toString() ?? '',
|
||||
));
|
||||
}
|
||||
|
||||
static void writeRawFailure(String message, Map<String, dynamic> extraData) async {
|
||||
try {
|
||||
await Globals().init();
|
||||
|
||||
final fn = path.join(Globals().rawFailureLogsDir.path, 'failure-${DateTime.now().toIso8601String()}.log');
|
||||
|
||||
var txt = "[TEXT]\n${message}\n\n";
|
||||
for (var k in extraData.keys) {
|
||||
txt += "[${k}]\n${_debugToStr(extraData[k])}\n\n";
|
||||
}
|
||||
|
||||
await File(fn).writeAsString(txt);
|
||||
|
||||
ApplicationLog.debug("Wrote raw failure log to '${fn}' ('${message}')");
|
||||
} catch (e) {
|
||||
print("Failed to <writeRawFailure>: ${e}");
|
||||
}
|
||||
}
|
||||
|
||||
static String _debugToStr(dynamic v) {
|
||||
if (v is String) {
|
||||
return v;
|
||||
}
|
||||
if (v is StackTrace) {
|
||||
return v.toString();
|
||||
}
|
||||
|
||||
try {
|
||||
final enc = new JsonEncoder.withIndent(" ");
|
||||
return enc.convert(v);
|
||||
} catch (e) {
|
||||
// ignore
|
||||
}
|
||||
|
||||
try {
|
||||
return jsonEncode(v);
|
||||
} catch (e) {
|
||||
// ignore
|
||||
}
|
||||
|
||||
try {
|
||||
return v.toString();
|
||||
} catch (e) {
|
||||
// ignore
|
||||
}
|
||||
|
||||
try {
|
||||
return "${v}";
|
||||
} catch (e) {
|
||||
// ignore
|
||||
}
|
||||
|
||||
return "<[!]FAILED_TO_PRINT_OBJECT>";
|
||||
}
|
||||
}
|
||||
|
||||
@HiveType(typeId: 103)
|
||||
|
@@ -2,7 +2,9 @@ import 'dart:io';
|
||||
|
||||
import 'package:device_info_plus/device_info_plus.dart';
|
||||
import 'package:package_info_plus/package_info_plus.dart';
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'package:path/path.dart' as path;
|
||||
|
||||
class Globals {
|
||||
static final Globals _singleton = Globals._internal();
|
||||
@@ -26,6 +28,9 @@ class Globals {
|
||||
|
||||
late SharedPreferences sharedPrefs;
|
||||
|
||||
late Directory appDocumentsDir;
|
||||
late Directory rawFailureLogsDir;
|
||||
|
||||
bool get isInitialized => _initialized;
|
||||
|
||||
Future<void> init() async {
|
||||
@@ -61,6 +66,11 @@ class Globals {
|
||||
|
||||
this.sharedPrefs = await SharedPreferences.getInstance();
|
||||
|
||||
this.appDocumentsDir = await getApplicationDocumentsDirectory();
|
||||
|
||||
this.rawFailureLogsDir = Directory(path.join(Globals().appDocumentsDir.path, "rawlogs"));
|
||||
await this.rawFailureLogsDir.create(recursive: true);
|
||||
|
||||
this._initialized = true;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user