consoleFormatter property
Console log message formatter with ANSI color codes. Formats the log message with colored timestamp, level, scope, message, and exception if present. And uses ansicolors to differentiate log levels.
Implementation
static LoggerFormatter consoleFormatter =
(LogContext context, LoggerDateFormatter? dateFormatter) {
final buffer = IndentingStringBuffer();
// Timestamp: Grey
buffer.writeRaw('\x1B[90m');
final now = context.timestamp;
final timeString = dateFormatter != null
? dateFormatter(now)
: defaultDateFormatter(now);
buffer.writeRaw(timeString);
buffer.writeRaw('\x1B[0m');
buffer.writeRaw(' ');
// Level: Colored
String levelColor = '';
switch (context.level) {
case Level.FINER:
case Level.FINE:
case Level.CONFIG:
case Level.INFO:
levelColor = '\x1B[32m'; // Green
break;
case Level.WARNING:
levelColor = '\x1B[33m'; // Yellow
break;
case Level.SHOUT:
case Level.SEVERE:
levelColor = '\x1B[31m'; // Red
break;
default:
levelColor = '\x1B[34m'; // Blue
}
buffer.writeRaw(levelColor);
buffer.writeRaw('[${context.level.name.toLowerCase()}]');
buffer.writeRaw('\x1B[0m');
if (context.scope.isNotEmpty) {
buffer.writeRaw(' [${context.scope}]');
}
buffer.writeRaw(' ${context.message}');
if (context.throwable != null || context.stackTrace != null) {
buffer.newLine();
buffer.indent();
if (context.throwable != null) {
if (context.throwable is Exception) {
buffer.writeBlock(
'\x1B[31mException: ${context.throwable}\x1B[0m',
);
} else {
buffer.writeBlock('\x1B[31mError: ${context.throwable}\x1B[0m');
}
}
if (context.stackTrace != null) {
buffer.writeLine('StackTrace:');
buffer.writeBlock(Trace.from(context.stackTrace!).terse.toString());
}
buffer.outdent();
}
return buffer.toString();
};