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 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(); } } }