From e1d2c17578dfc1f6735a24362d391df81b452794 Mon Sep 17 00:00:00 2001 From: Vishesh Handa Date: Fri, 5 Mar 2021 19:23:09 +0100 Subject: [PATCH] Logger: Write the stack trace properly This will make it easier to read --- lib/screens/debug_screen.dart | 2 +- lib/screens/folder_listing.dart | 4 +-- lib/utils/logger.dart | 46 ++++++++++++++++++++++++++------- 3 files changed, 40 insertions(+), 12 deletions(-) diff --git a/lib/screens/debug_screen.dart b/lib/screens/debug_screen.dart index 40b15ac2..5436272c 100644 --- a/lib/screens/debug_screen.dart +++ b/lib/screens/debug_screen.dart @@ -157,7 +157,7 @@ class _DebugScreenState extends State { str += ' ' + msg.ex; } if (msg.stack != null) { - str += ' ' + msg.stack; + str += ' ' + msg.stack.toString(); } var props = []; diff --git a/lib/screens/folder_listing.dart b/lib/screens/folder_listing.dart index 3967305a..e16893a4 100644 --- a/lib/screens/folder_listing.dart +++ b/lib/screens/folder_listing.dart @@ -17,10 +17,10 @@ limitations under the License. import 'package:flutter/material.dart'; import 'package:easy_localization/easy_localization.dart'; -import 'package:gitjournal/app_settings.dart'; -import 'package:gitjournal/core/flattened_notes_folder.dart'; import 'package:provider/provider.dart'; +import 'package:gitjournal/app_settings.dart'; +import 'package:gitjournal/core/flattened_notes_folder.dart'; import 'package:gitjournal/core/notes_folder_fs.dart'; import 'package:gitjournal/repository.dart'; import 'package:gitjournal/widgets/app_bar_menu_button.dart'; diff --git a/lib/utils/logger.dart b/lib/utils/logger.dart index 1a6876a2..888b8514 100644 --- a/lib/utils/logger.dart +++ b/lib/utils/logger.dart @@ -104,9 +104,7 @@ class Log { l: level, msg: msg.replaceAll('\n', ' '), ex: ex != null ? ex.toString().replaceAll('\n', ' ') : null, - stack: stackTrace != null - ? stackTrace.toString().replaceAll('\n', ' ') - : null, + stack: stackTrace.toListOfMap(), props: props, ); @@ -184,7 +182,7 @@ class LogMessage { String l; String msg; String ex; - String stack; + List> stack; Map props; LogMessage({ @@ -202,7 +200,7 @@ class LogMessage { 'l': l, 'msg': msg, if (ex != null && ex.isNotEmpty) 'ex': ex, - if (stack != null && stack.isNotEmpty) 'stack': stack, + if (stack != null) 'stack': stack, if (props != null && props.isNotEmpty) 'p': props, }; } @@ -211,16 +209,46 @@ class LogMessage { t = map['t']; l = map['l']; msg = map['msg']; - ex = _checkForNull(map['ex']); - stack = _checkForNull(map['stack']); - props = _checkForNull(map['p']); + ex = _checkForStringNull(map['ex']); + stack = _checkForStringNull(map['stack']); + props = _checkForStringNull(map['p']); } } -dynamic _checkForNull(dynamic e) { +dynamic _checkForStringNull(dynamic e) { if (e == null) return e; if (e.runtimeType == String && e.toString().trim() == 'null') { return null; } return e; } + +extension TraceJsonEncoding on StackTrace { + List> toListOfMap() { + var list = >[]; + for (var f in Trace.from(this).frames) { + list.add(f.toMap()); + } + return list; + } +} + +extension FrameJsonEncoding on Frame { + Map toMap() { + return _removeNull({ + 'column': column, + 'uri': uri.toString(), + 'line': line, + 'member': member, + 'isCore': isCore, + 'library': library, + 'location': location, + 'package': package, + }); + } +} + +Map _removeNull(Map map) { + map.removeWhere((key, value) => value == null); + return map; +}