w static method
void
w(
- dynamic object, {
- dynamic level = LogLevel.FINE,
- dynamic header = true,
Implementation
static void w(dynamic object,
{var level = LogLevel.FINE, var header = true}) {
final frames = StackTrace.current.toString().split('\n');
final callerFrame = frames
.firstWhere(
(frame) => !frame.contains('console.dart'),
orElse: () => '',
)
.replaceFirst(RegExp(r'^\s*#?\d+\s+'), '')
.trim();
String startColor = "";
String endColor = "\x1B[0m";
switch (level) {
case LogLevel.ERROR:
startColor = "\x1B[38;5;196m"; // bright red
break;
case LogLevel.WARNING:
startColor = "\x1B[38;2;255;193;7m";
break;
case LogLevel.DEBUG:
startColor = "\x1B[38;2;150;150;150m"; // gray
break;
case LogLevel.FINE:
startColor = "\x1B[38;2;80;220;120m"; // gray
break;
}
StringBuffer str = StringBuffer();
str.writeln("$startColor┌${"─" * 98}┐$endColor");
if (header) {
str.writeln("$startColor│ $callerFrame$endColor");
str.writeln("$startColor├${"─" * 98}┤$endColor");
}
if (object is Map &&
object.containsKey('error') &&
object.containsKey('stack')) {
str.writeln(
"$startColor $level ${DateTime.now().format('y-M-d H:m:s')} ${object['error']}$endColor");
str.writeln("$startColor├${"─" * 98}┤$endColor");
int index = 0;
for (var s in object['stack'] as List) {
var line = s.toString().replaceFirst(RegExp(r'^\s*\d+\s+'), '').trim();
line = line.replaceAll('\n', ' ');
if (line.isNotEmpty) {
str.writeln("$startColor ${++index}. $line$endColor");
}
}
} else {
for (var obLine in object.toString().split('\n')) {
str.writeln("$startColor $obLine$endColor");
}
}
str.writeln(startColor + ("└${"─" * 98}┘") + endColor);
print(str.toString());
}