Logger: Write the stack trace properly

This will make it easier to read
This commit is contained in:
Vishesh Handa
2021-03-05 19:23:09 +01:00
parent 581e002162
commit e1d2c17578
3 changed files with 40 additions and 12 deletions

View File

@ -157,7 +157,7 @@ class _DebugScreenState extends State<DebugScreen> {
str += ' ' + msg.ex; str += ' ' + msg.ex;
} }
if (msg.stack != null) { if (msg.stack != null) {
str += ' ' + msg.stack; str += ' ' + msg.stack.toString();
} }
var props = <TextSpan>[]; var props = <TextSpan>[];

View File

@ -17,10 +17,10 @@ limitations under the License.
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:easy_localization/easy_localization.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: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/core/notes_folder_fs.dart';
import 'package:gitjournal/repository.dart'; import 'package:gitjournal/repository.dart';
import 'package:gitjournal/widgets/app_bar_menu_button.dart'; import 'package:gitjournal/widgets/app_bar_menu_button.dart';

View File

@ -104,9 +104,7 @@ class Log {
l: level, l: level,
msg: msg.replaceAll('\n', ' '), msg: msg.replaceAll('\n', ' '),
ex: ex != null ? ex.toString().replaceAll('\n', ' ') : null, ex: ex != null ? ex.toString().replaceAll('\n', ' ') : null,
stack: stackTrace != null stack: stackTrace.toListOfMap(),
? stackTrace.toString().replaceAll('\n', ' ')
: null,
props: props, props: props,
); );
@ -184,7 +182,7 @@ class LogMessage {
String l; String l;
String msg; String msg;
String ex; String ex;
String stack; List<Map<String, dynamic>> stack;
Map<String, dynamic> props; Map<String, dynamic> props;
LogMessage({ LogMessage({
@ -202,7 +200,7 @@ class LogMessage {
'l': l, 'l': l,
'msg': msg, 'msg': msg,
if (ex != null && ex.isNotEmpty) 'ex': ex, 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, if (props != null && props.isNotEmpty) 'p': props,
}; };
} }
@ -211,16 +209,46 @@ class LogMessage {
t = map['t']; t = map['t'];
l = map['l']; l = map['l'];
msg = map['msg']; msg = map['msg'];
ex = _checkForNull(map['ex']); ex = _checkForStringNull(map['ex']);
stack = _checkForNull(map['stack']); stack = _checkForStringNull(map['stack']);
props = _checkForNull(map['p']); props = _checkForStringNull(map['p']);
} }
} }
dynamic _checkForNull(dynamic e) { dynamic _checkForStringNull(dynamic e) {
if (e == null) return e; if (e == null) return e;
if (e.runtimeType == String && e.toString().trim() == 'null') { if (e.runtimeType == String && e.toString().trim() == 'null') {
return null; return null;
} }
return e; return e;
} }
extension TraceJsonEncoding on StackTrace {
List<Map<String, dynamic>> toListOfMap() {
var list = <Map<String, dynamic>>[];
for (var f in Trace.from(this).frames) {
list.add(f.toMap());
}
return list;
}
}
extension FrameJsonEncoding on Frame {
Map<String, dynamic> toMap() {
return _removeNull({
'column': column,
'uri': uri.toString(),
'line': line,
'member': member,
'isCore': isCore,
'library': library,
'location': location,
'package': package,
});
}
}
Map<String, dynamic> _removeNull(Map<String, dynamic> map) {
map.removeWhere((key, value) => value == null);
return map;
}