Flutter Log Extension
import 'dart:io';
enum LogLevel {
debug("💬", "\x1B[37m"), // White
info("ℹ️", "\x1B[36m"), // Cyan
warning("⚠️", "\x1B[33m"), // Yellow
error("❌", "\x1B[31m"); // Red
final String emoji;
final String colorCode;
const LogLevel(this.emoji, this.colorCode);
}
extension LogExtension on Object {
void log({
String tag = "APP",
LogLevel level = LogLevel.debug,
bool enableColors = true,
bool showCallerInfo = false,
}) {
final now = DateTime.now().toIso8601String();
final color = (enableColors && _supportsAnsiColors) ? level.colorCode : '';
final reset = (enableColors && _supportsAnsiColors) ? "\x1B[0m" : '';
final callerInfo = showCallerInfo ? _getCallerInfo() : '';
final callerSection = callerInfo.isNotEmpty ? " $callerInfo" : '';
final message = "${level.emoji} [$tag:$callerSection] $now $this";
debugPrint("$color$message$reset");
}
bool get _supportsAnsiColors =>
!Platform.isWindows || stdout.supportsAnsiEscapes;
String _getCallerInfo() {
try {
final line = StackTrace.current.toString().split("\n")[2].trim();
final match = RegExp(r'\((.+?):(\d+):\d+\)$').firstMatch(line);
if (match != null) {
final file =
match.group(1)?.split(Platform.pathSeparator).last ?? 'unknown';
final lineNum = match.group(2) ?? '0';
return "$file:$lineNum";
}
} catch (_) {}
return '';
}
}
If you want to change colors of logs you can follow this link for the ansi codes.
Usage
// Usage
void main() {
"Fetching user data...".log(
tag: "USER",
level: LogLevel.info,
showCallerInfo: true,
);
"Missing token!".log(tag: "AUTH", level: LogLevel.warning);
"Something exploded!".log(tag: "CORE", level: LogLevel.error);
Output
