From c70b149c204a23c46836b3de380f88bc21d79408 Mon Sep 17 00:00:00 2001 From: Christian Pauly Date: Wed, 12 May 2021 11:53:58 +0200 Subject: [PATCH] change: Remove logger The logger package has a lot of issues. The colors are not working in web and on iOS. Emojis are not working on some platforms. It introduced a not very important library in a SDk which is intended to be as minimal as possible. This simplifies the logging to a format which works everywhere. The # Syntax makes it also look good as markdown. It is not very far away from the default syntax of errors and stacktraces. It still provides several log levels, the same API and a list of output events for the logviewer. --- lib/src/utils/logs.dart | 141 ++++++++++++++++++++------- pubspec.yaml | 1 - test/matrix_api_test.dart | 9 +- test/try_get_map_extension_test.dart | 1 - 4 files changed, 111 insertions(+), 41 deletions(-) diff --git a/lib/src/utils/logs.dart b/lib/src/utils/logs.dart index a6a64be5..58314a71 100644 --- a/lib/src/utils/logs.dart +++ b/lib/src/utils/logs.dart @@ -21,50 +21,123 @@ * SOFTWARE. */ -import 'package:logger/logger.dart'; +enum Level { + wtf, + error, + warning, + info, + debug, + verbose, +} -class Logs extends Logger { +class Logs { static final Logs _singleton = Logs._internal(); factory Logs() { return _singleton; } - set level(Level newLevel) => Logger.level = newLevel; + Level level = Level.info; - final List outputEvents = []; + final List outputEvents = []; - Logs._internal() - : super( - printer: _MatrixSdkPrinter(), - filter: _MatrixSdkFilter(), - output: _CacheOutput(), - ); -} + Logs._internal(); -class _MatrixSdkFilter extends LogFilter { - @override - bool shouldLog(LogEvent event) => event.level.index >= Logger.level.index; -} - -class _CacheOutput extends ConsoleOutput { - @override - void output(OutputEvent event) { - Logs().outputEvents.add(event); - super.output(event); - } -} - -class _MatrixSdkPrinter extends PrettyPrinter { - _MatrixSdkPrinter() : super(methodCount: 0, lineLength: 100); - - @override - List log(LogEvent event) { - if (event.error == null && event.stackTrace == null) { - return [ - '${PrettyPrinter.levelColors[event.level]}${PrettyPrinter.levelEmojis[event.level]} ${event.message.toString()}' - ]; + void addLogEvent(LogEvent logEvent) { + logEvent.printOut(); + if (logEvent.level.index >= level.index) { + outputEvents.add(logEvent); + } + } + + void wtf(String title, [Object exception, StackTrace stackTrace]) => + addLogEvent( + LogEvent( + title, + exception: exception, + stackTrace: stackTrace, + level: Level.wtf, + ), + ); + + void e(String title, [Object exception, StackTrace stackTrace]) => + addLogEvent( + LogEvent( + title, + exception: exception, + stackTrace: stackTrace, + level: Level.error, + ), + ); + + void w(String title, [Object exception, StackTrace stackTrace]) => + addLogEvent( + LogEvent( + title, + exception: exception, + stackTrace: stackTrace, + level: Level.warning, + ), + ); + + void i(String title, [Object exception, StackTrace stackTrace]) => + addLogEvent( + LogEvent( + title, + exception: exception, + stackTrace: stackTrace, + level: Level.info, + ), + ); + + void d(String title, [Object exception, StackTrace stackTrace]) => + addLogEvent( + LogEvent( + title, + exception: exception, + stackTrace: stackTrace, + level: Level.debug, + ), + ); + + void v(String title, [Object exception, StackTrace stackTrace]) => + addLogEvent( + LogEvent( + title, + exception: exception, + stackTrace: stackTrace, + level: Level.verbose, + ), + ); +} + +// ignore: avoid_print +class LogEvent { + final String title; + final Object exception; + final StackTrace stackTrace; + final Level level; + + LogEvent( + this.title, { + this.exception, + this.stackTrace, + this.level = Level.debug, + }); + + void printOut() { + var logsStr = + '# [${level.toString().split('.').last.toUpperCase()}] $title'; + if (exception != null) { + logsStr += ' - ' + exception.toString(); + } + // ignore: avoid_print + print(logsStr); + if (stackTrace != null) { + // ignore: avoid_print + print('## Stacktrace:'); + // ignore: avoid_print + print(stackTrace.toString()); } - return super.log(event); } } diff --git a/pubspec.yaml b/pubspec.yaml index a4f92970..0ef76bf5 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -8,7 +8,6 @@ environment: dependencies: http: ^0.13.0 - logger: ^1.0.0 mime: ^1.0.0 dev_dependencies: diff --git a/test/matrix_api_test.dart b/test/matrix_api_test.dart index 31b54564..e58464a6 100644 --- a/test/matrix_api_test.dart +++ b/test/matrix_api_test.dart @@ -22,7 +22,6 @@ */ import 'dart:typed_data'; -import 'package:logger/logger.dart'; import 'package:matrix_api_lite/fake_matrix_api.dart'; import 'package:matrix_api_lite/matrix_api_lite.dart'; import 'package:test/test.dart'; @@ -37,11 +36,11 @@ void main() { Logs().w('Test log'); Logs().e('Test log'); Logs().wtf('Test log'); - Logs().v('Test log', Exception('Test')); + Logs().v('Test log', Exception('There has been a verbose')); Logs().d('Test log', Exception('Test')); - Logs().w('Test log', Exception('Test')); - Logs().e('Test log', Exception('Test')); - Logs().wtf('Test log', Exception('Test')); + Logs().w('Test log', Exception('Very bad error')); + Logs().e('Test log', Exception('Test'), StackTrace.current); + Logs().wtf('Test log', Exception('Test'), StackTrace.current); }); Logs().level = Level.error; final matrixApi = MatrixApi( diff --git a/test/try_get_map_extension_test.dart b/test/try_get_map_extension_test.dart index 45a4503b..d38a1e68 100644 --- a/test/try_get_map_extension_test.dart +++ b/test/try_get_map_extension_test.dart @@ -21,7 +21,6 @@ * SOFTWARE. */ -import 'package:logger/logger.dart'; import 'package:matrix_api_lite/matrix_api_lite.dart'; import 'package:test/test.dart';