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;
}
if (msg.stack != null) {
str += ' ' + msg.stack;
str += ' ' + msg.stack.toString();
}
var props = <TextSpan>[];

View File

@ -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';

View File

@ -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<Map<String, dynamic>> stack;
Map<String, dynamic> 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<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;
}