2024-01-13 23:10:48 +03:30
|
|
|
// ignore_for_file: avoid_print
|
|
|
|
|
|
2023-08-19 22:27:23 +03:30
|
|
|
import 'dart:io';
|
|
|
|
|
|
|
|
|
|
import 'package:loggy/loggy.dart';
|
|
|
|
|
|
2024-01-13 23:10:48 +03:30
|
|
|
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];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-08-19 22:27:23 +03:30
|
|
|
class FileLogPrinter extends LoggyPrinter {
|
2023-09-18 22:34:17 +03:30
|
|
|
FileLogPrinter(
|
|
|
|
|
String filePath, {
|
|
|
|
|
this.minLevel = LogLevel.debug,
|
|
|
|
|
}) : _logFile = File(filePath);
|
2023-08-19 22:27:23 +03:30
|
|
|
|
|
|
|
|
final File _logFile;
|
2023-09-18 22:34:17 +03:30
|
|
|
final LogLevel minLevel;
|
2023-08-19 22:27:23 +03:30
|
|
|
|
|
|
|
|
late final _sink = _logFile.openWrite(
|
|
|
|
|
mode: FileMode.writeOnly,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
void onLog(LogRecord record) {
|
2023-08-22 23:50:33 +03:30
|
|
|
final time = record.time.toIso8601String().split('T')[1];
|
|
|
|
|
_sink.writeln("$time - $record");
|
2023-12-22 14:16:24 +03:30
|
|
|
if (record.error != null) {
|
|
|
|
|
_sink.writeln(record.error);
|
|
|
|
|
}
|
|
|
|
|
if (record.stackTrace != null) {
|
|
|
|
|
_sink.writeln(record.stackTrace);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void dispose() {
|
|
|
|
|
_sink.close();
|
2023-08-19 22:27:23 +03:30
|
|
|
}
|
|
|
|
|
}
|