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.
This commit is contained in:
Christian Pauly 2021-05-12 11:53:58 +02:00
parent adb6d0a564
commit c70b149c20
4 changed files with 111 additions and 41 deletions

View File

@ -21,50 +21,123 @@
* SOFTWARE. * 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(); static final Logs _singleton = Logs._internal();
factory Logs() { factory Logs() {
return _singleton; return _singleton;
} }
set level(Level newLevel) => Logger.level = newLevel; Level level = Level.info;
final List<OutputEvent> outputEvents = []; final List<LogEvent> outputEvents = [];
Logs._internal() Logs._internal();
: super(
printer: _MatrixSdkPrinter(), void addLogEvent(LogEvent logEvent) {
filter: _MatrixSdkFilter(), logEvent.printOut();
output: _CacheOutput(), 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,
),
); );
} }
class _MatrixSdkFilter extends LogFilter { // ignore: avoid_print
@override class LogEvent {
bool shouldLog(LogEvent event) => event.level.index >= Logger.level.index; final String title;
} final Object exception;
final StackTrace stackTrace;
final Level level;
class _CacheOutput extends ConsoleOutput { LogEvent(
@override this.title, {
void output(OutputEvent event) { this.exception,
Logs().outputEvents.add(event); this.stackTrace,
super.output(event); this.level = Level.debug,
} });
}
class _MatrixSdkPrinter extends PrettyPrinter { void printOut() {
_MatrixSdkPrinter() : super(methodCount: 0, lineLength: 100); var logsStr =
'# [${level.toString().split('.').last.toUpperCase()}] $title';
@override if (exception != null) {
List<String> log(LogEvent event) { logsStr += ' - ' + exception.toString();
if (event.error == null && event.stackTrace == null) { }
return [ // ignore: avoid_print
'${PrettyPrinter.levelColors[event.level]}${PrettyPrinter.levelEmojis[event.level]} ${event.message.toString()}' print(logsStr);
]; if (stackTrace != null) {
// ignore: avoid_print
print('## Stacktrace:');
// ignore: avoid_print
print(stackTrace.toString());
} }
return super.log(event);
} }
} }

View File

@ -8,7 +8,6 @@ environment:
dependencies: dependencies:
http: ^0.13.0 http: ^0.13.0
logger: ^1.0.0
mime: ^1.0.0 mime: ^1.0.0
dev_dependencies: dev_dependencies:

View File

@ -22,7 +22,6 @@
*/ */
import 'dart:typed_data'; import 'dart:typed_data';
import 'package:logger/logger.dart';
import 'package:matrix_api_lite/fake_matrix_api.dart'; import 'package:matrix_api_lite/fake_matrix_api.dart';
import 'package:matrix_api_lite/matrix_api_lite.dart'; import 'package:matrix_api_lite/matrix_api_lite.dart';
import 'package:test/test.dart'; import 'package:test/test.dart';
@ -37,11 +36,11 @@ void main() {
Logs().w('Test log'); Logs().w('Test log');
Logs().e('Test log'); Logs().e('Test log');
Logs().wtf('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().d('Test log', Exception('Test'));
Logs().w('Test log', Exception('Test')); Logs().w('Test log', Exception('Very bad error'));
Logs().e('Test log', Exception('Test')); Logs().e('Test log', Exception('Test'), StackTrace.current);
Logs().wtf('Test log', Exception('Test')); Logs().wtf('Test log', Exception('Test'), StackTrace.current);
}); });
Logs().level = Level.error; Logs().level = Level.error;
final matrixApi = MatrixApi( final matrixApi = MatrixApi(

View File

@ -21,7 +21,6 @@
* SOFTWARE. * SOFTWARE.
*/ */
import 'package:logger/logger.dart';
import 'package:matrix_api_lite/matrix_api_lite.dart'; import 'package:matrix_api_lite/matrix_api_lite.dart';
import 'package:test/test.dart'; import 'package:test/test.dart';