mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-06-26 16:46:51 +08:00
Logger: Write the stack trace properly
This will make it easier to read
This commit is contained in:
@ -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>[];
|
||||||
|
@ -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';
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user