You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

64 lines
1.7 KiB
Dart

import 'dart:convert';
import 'package:logger/logger.dart';
Logger getLogger() {
// Logger.level = Level.debug;
Logger.level = Level.info;
return Logger(
printer: MyLogPrinter(
printTime: true,
colors: true,
),
);
}
class MyLogPrinter extends LogPrinter {
static final levelPrefixes = {
Level.trace: ' [TRACE]',
Level.debug: ' [DEBUG]',
Level.info: ' [INFO]',
Level.warning: '[WARNING]',
Level.error: ' [ERROR]',
Level.fatal: ' [FATAL]',
};
static final levelColors = {
Level.trace: AnsiColor.fg(AnsiColor.grey(0.5)),
Level.debug: const AnsiColor.none(),
Level.info: const AnsiColor.fg(12),
Level.warning: const AnsiColor.fg(208),
Level.error: const AnsiColor.fg(196),
Level.fatal: const AnsiColor.fg(199),
};
final bool printTime;
final bool colors;
MyLogPrinter({this.printTime = false, this.colors = true});
@override
List<String> log(LogEvent event) {
var messageStr = _stringifyMessage(event.message);
var errorStr = event.error != null ? ' ERROR: ${event.error}' : '';
var timeStr = printTime ? event.time.toIso8601String() : '';
return ['${_labelFor(event.level)} $timeStr $messageStr$errorStr'];
}
String _labelFor(Level level) {
var prefix = levelPrefixes[level]!;
var color = levelColors[level]!;
return colors ? color(prefix) : prefix;
}
String _stringifyMessage(dynamic message) {
final finalMessage = message is Function ? message() : message;
if (finalMessage is Map || finalMessage is Iterable) {
var encoder = const JsonEncoder.withIndent(null);
return encoder.convert(finalMessage);
} else {
return finalMessage.toString();
}
}
}