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.
*/
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<OutputEvent> outputEvents = [];
final List<LogEvent> 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<String> 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);
}
}

View File

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

View File

@ -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(

View File

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