@@ -75,6 +75,16 @@ class PrettyPrinter extends LogPrinter {
75
75
final bool printEmojis;
76
76
final bool printTime;
77
77
78
+ /// To prevent ascii 'boxing' of any log [Level] include the level in map for excludeBox,
79
+ /// for example to prevent boxing of [Level.verbose] and [Level.info] use excludeBox:{Level.verbose:true, Level.info:true}
80
+ final Map <Level , bool > excludeBox;
81
+
82
+ /// To make the default for every level to prevent boxing entirely set [noBoxing] to true
83
+ /// (boxing can still be turned on for some levels by using something like excludeBox:{Level.error:false} )
84
+ final bool noBoxingByDefault;
85
+
86
+ late final Map <Level , bool > includeBox;
87
+
78
88
String _topBorder = '' ;
79
89
String _middleBorder = '' ;
80
90
String _bottomBorder = '' ;
@@ -87,6 +97,8 @@ class PrettyPrinter extends LogPrinter {
87
97
this .colors = true ,
88
98
this .printEmojis = true ,
89
99
this .printTime = false ,
100
+ this .excludeBox = const {},
101
+ this .noBoxingByDefault = false ,
90
102
}) {
91
103
_startTime ?? = DateTime .now ();
92
104
@@ -100,6 +112,14 @@ class PrettyPrinter extends LogPrinter {
100
112
_topBorder = '$topLeftCorner $doubleDividerLine ' ;
101
113
_middleBorder = '$middleCorner $singleDividerLine ' ;
102
114
_bottomBorder = '$bottomLeftCorner $doubleDividerLine ' ;
115
+
116
+ // Translate excludeBox map (constant if default) to includeBox map with all Level enum possibilities
117
+ includeBox = {};
118
+ for (var levelEnum in Level .values) {
119
+ includeBox[levelEnum] = excludeBox.containsKey (levelEnum)
120
+ ? ! excludeBox[levelEnum]!
121
+ : ! noBoxingByDefault;
122
+ }
103
123
}
104
124
105
125
@override
@@ -252,38 +272,40 @@ class PrettyPrinter extends LogPrinter {
252
272
// This code is non trivial and a type annotation here helps understanding.
253
273
// ignore: omit_local_variable_types
254
274
List <String > buffer = [];
275
+ var verticalLineAtLevel = (includeBox[level]! ) ? (verticalLine + ' ' ) : '' ;
255
276
var color = _getLevelColor (level);
256
- buffer.add (color (_topBorder));
277
+ if (includeBox[level] ! ) buffer.add (color (_topBorder));
257
278
258
279
if (error != null ) {
259
280
var errorColor = _getErrorColor (level);
260
281
for (var line in error.split ('\n ' )) {
261
282
buffer.add (
262
- color ('$ verticalLine ' ) +
283
+ color (verticalLineAtLevel ) +
263
284
errorColor.resetForeground +
264
285
errorColor (line) +
265
286
errorColor.resetBackground,
266
287
);
267
288
}
268
- buffer.add (color (_middleBorder));
289
+ if (includeBox[level] ! ) buffer.add (color (_middleBorder));
269
290
}
270
291
271
292
if (stacktrace != null ) {
272
293
for (var line in stacktrace.split ('\n ' )) {
273
- buffer.add (color ('$verticalLine $line ' ));
294
+ buffer.add (color ('$verticalLineAtLevel $line ' ));
274
295
}
275
- buffer.add (color (_middleBorder));
296
+ if (includeBox[level] ! ) buffer.add (color (_middleBorder));
276
297
}
277
298
278
299
if (time != null ) {
279
- buffer..add (color ('$verticalLine $time ' ))..add (color (_middleBorder));
300
+ buffer.add (color ('$verticalLineAtLevel $time ' ));
301
+ if (includeBox[level]! ) buffer.add (color (_middleBorder));
280
302
}
281
303
282
304
var emoji = _getEmoji (level);
283
305
for (var line in message.split ('\n ' )) {
284
- buffer.add (color ('$verticalLine $emoji $line ' ));
306
+ buffer.add (color ('$verticalLineAtLevel $emoji $line ' ));
285
307
}
286
- buffer.add (color (_bottomBorder));
308
+ if (includeBox[level] ! ) buffer.add (color (_bottomBorder));
287
309
288
310
return buffer;
289
311
}
0 commit comments