Files
umbrix/lib/core/logger/custom_logger.dart
2024-01-13 23:10:48 +03:30

85 lines
2.0 KiB
Dart

// ignore_for_file: avoid_print
import 'dart:io';
import 'package:loggy/loggy.dart';
class ConsolePrinter extends LoggyPrinter {
const ConsolePrinter({
this.showColors = false,
});
final bool showColors;
static final _levelColors = {
LogLevel.debug:
AnsiColor(foregroundColor: AnsiColor.grey(0.5), italic: true),
LogLevel.info: AnsiColor(foregroundColor: 35),
LogLevel.warning: AnsiColor(foregroundColor: 214),
LogLevel.error: AnsiColor(foregroundColor: 196),
};
@override
void onLog(LogRecord record) {
final colorize = showColors && stdout.supportsAnsiEscapes;
final time = record.time.toIso8601String().split('T')[1];
final callerFrame = record.callerFrame == null
? ' '
: ' (${record.callerFrame?.location}) ';
final String logLevel;
if (colorize) {
logLevel = record.level.name.toUpperCase().padRight(8);
} else {
logLevel = "[${record.level.name.toUpperCase()}]".padRight(10);
}
final color =
showColors ? levelColor(record.level) ?? AnsiColor() : AnsiColor();
print(
color(
'$time $logLevel [${record.loggerName}]$callerFrame${record.message}',
),
);
if (record.stackTrace != null) {
print(record.stackTrace);
}
}
AnsiColor? levelColor(LogLevel level) {
return _levelColors[level];
}
}
class FileLogPrinter extends LoggyPrinter {
FileLogPrinter(
String filePath, {
this.minLevel = LogLevel.debug,
}) : _logFile = File(filePath);
final File _logFile;
final LogLevel minLevel;
late final _sink = _logFile.openWrite(
mode: FileMode.writeOnly,
);
@override
void onLog(LogRecord record) {
final time = record.time.toIso8601String().split('T')[1];
_sink.writeln("$time - $record");
if (record.error != null) {
_sink.writeln(record.error);
}
if (record.stackTrace != null) {
_sink.writeln(record.stackTrace);
}
}
void dispose() {
_sink.close();
}
}