import 'package:logging/logging.dart' as logging; class Tag { static const getArgsCompletions = Tag._('getArgsCompletions'); final String name; const Tag._(this.name); static int get longestTagLength => getArgsCompletions.name.length; } void log(Object o, [Tag? tag]) { String safe; try { safe = o.toString(); } catch (e, stack) { safe = 'Error converting provided object $o into ' 'String\nException:\t${e}Stack:\t$stack'; } final startArgs = ['completion']; if (tag != null) { startArgs.add(tag.name); } final loggerName = startArgs.join('.'); logging.Logger(loggerName).info(safe); } String helpfulToString(Object input) { if (input is Iterable) { final items = input.cast().map(helpfulToString).toList(); if (items.isEmpty) { return '-empty-'; } else { return "[${items.join(', ')}]"; } } return Error.safeToString(input); }