@@ -42,7 +42,17 @@ class PrettyPrinter extends LogPrinter {
4242 Level .wtf: '👾 ' ,
4343 };
4444
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]+\/)' );
4656
4757 static DateTime _startTime;
4858
@@ -110,22 +120,16 @@ class PrettyPrinter extends LogPrinter {
110120
111121 String formatStackTrace (StackTrace stackTrace, int methodCount) {
112122 var lines = stackTrace.toString ().split ('\n ' );
113-
114123 var formatted = < String > [];
115124 var count = 0 ;
116125 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 ;
129133 }
130134 }
131135
@@ -136,6 +140,23 @@ class PrettyPrinter extends LogPrinter {
136140 }
137141 }
138142
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+
139160 String getTime () {
140161 String _threeDigits (int n) {
141162 if (n >= 100 ) return '$n ' ;
0 commit comments