@@ -42,7 +42,17 @@ class PrettyPrinter extends LogPrinter {
42
42
Level .wtf: '👾 ' ,
43
43
};
44
44
45
- static final stackTraceRegex = RegExp (r'#[0-9]+[\s]+(.+) \(([^\s]+)\)' );
45
+ /// Matches a stacktrace line as generated on Android/iOS devices.
46
+ /// For example:
47
+ /// #1 Logger.log (package:logger/src/logger.dart:115:29)
48
+ static final _deviceStackTraceRegex =
49
+ RegExp (r'#[0-9]+[\s]+(.+) \(([^\s]+)\)' );
50
+
51
+ /// Matches a stacktrace line as generated by Flutter web.
52
+ /// For example:
53
+ /// packages/logger/src/printers/pretty_printer.dart 91:37
54
+ static final _webStackTraceRegex =
55
+ RegExp (r'^((packages|dart-sdk)\/[^\s]+\/)' );
46
56
47
57
static DateTime _startTime;
48
58
@@ -110,22 +120,16 @@ class PrettyPrinter extends LogPrinter {
110
120
111
121
String formatStackTrace (StackTrace stackTrace, int methodCount) {
112
122
var lines = stackTrace.toString ().split ('\n ' );
113
-
114
123
var formatted = < String > [];
115
124
var count = 0 ;
116
125
for (var line in lines) {
117
- var match = stackTraceRegex.matchAsPrefix (line);
118
- if (match != null ) {
119
- if (match.group (2 ).startsWith ('package:logger' )) {
120
- continue ;
121
- }
122
- var newLine = '#$count ${match .group (1 )} (${match .group (2 )})' ;
123
- formatted.add (newLine.replaceAll ('<anonymous closure>' , '()' ));
124
- if (++ count == methodCount) {
125
- break ;
126
- }
127
- } else {
128
- formatted.add (line);
126
+ if (_discardDeviceStacktraceLine (line) ||
127
+ _discardWebStacktraceLine (line)) {
128
+ continue ;
129
+ }
130
+ formatted.add ('#$count ${line .replaceFirst (RegExp (r'#\d+\s+' ), '' )}' );
131
+ if (++ count == methodCount) {
132
+ break ;
129
133
}
130
134
}
131
135
@@ -136,6 +140,23 @@ class PrettyPrinter extends LogPrinter {
136
140
}
137
141
}
138
142
143
+ bool _discardDeviceStacktraceLine (String line) {
144
+ var match = _deviceStackTraceRegex.matchAsPrefix (line);
145
+ if (match == null ) {
146
+ return false ;
147
+ }
148
+ return match.group (2 ).startsWith ('package:logger' );
149
+ }
150
+
151
+ bool _discardWebStacktraceLine (String line) {
152
+ var match = _webStackTraceRegex.matchAsPrefix (line);
153
+ if (match == null ) {
154
+ return false ;
155
+ }
156
+ return match.group (1 ).startsWith ('packages/logger' ) ||
157
+ match.group (1 ).startsWith ('dart-sdk/lib' );
158
+ }
159
+
139
160
String getTime () {
140
161
String _threeDigits (int n) {
141
162
if (n >= 100 ) return '$n ' ;
0 commit comments