Skip to content

Commit

Permalink
feat: add minimalistic frontend logger
Browse files Browse the repository at this point in the history
Signed-off-by: Philipp Hoenisch <[email protected]>
  • Loading branch information
bonomat committed Jan 20, 2024
1 parent 7addfa4 commit 3e7bb98
Show file tree
Hide file tree
Showing 4 changed files with 87 additions and 0 deletions.
23 changes: 23 additions & 0 deletions webapp/frontend/lib/logger/logger.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import 'package:get_10101/logger/simple_utc_printer.dart';
import 'package:logger/logger.dart';

// Getter to access the logger instance
Logger get logger => AppLogger.instance;

class AppLogger {
static late final Logger instance;
}

void buildLogger(bool isLogLevelTrace) {
final logger = Logger(
output: ConsoleOutput(),
filter: ProductionFilter(),
level: isLogLevelTrace ? Level.trace : Level.debug,
printer: SimpleUTCPrinter(
// Colorful log messages
colors: true,
// Should each log print contain a timestamp
printTime: true));

AppLogger.instance = logger;
}
57 changes: 57 additions & 0 deletions webapp/frontend/lib/logger/simple_utc_printer.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
import 'dart:convert';

import 'package:logger/logger.dart';

/// Outputs simple log messages:
/// ```
/// [E] Log message ERROR: Error info
/// ```
class SimpleUTCPrinter extends LogPrinter {
static final levelPrefixes = {
Level.trace: '[TRACE]',
Level.debug: '[DEBUG]',
Level.info: '[INFO]',
Level.warning: '[WARN]',
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;

SimpleUTCPrinter({this.printTime = false, this.colors = true});

@override
List<String> log(LogEvent event) {
var messageStr = _stringifyMessage(event.message);
var errorStr = event.error != null ? ' ERROR: ${event.error}' : '';
var timeStr = printTime ? 'TIME: ${event.time.toUtc().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();
}
}
}
6 changes: 6 additions & 0 deletions webapp/frontend/lib/main.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
import 'package:get_10101/common/version_service.dart';
import 'package:get_10101/logger/logger.dart';
import 'package:get_10101/routes.dart';
import 'package:get_10101/wallet/wallet_service.dart';
import 'package:provider/provider.dart';
Expand All @@ -8,6 +9,11 @@ import 'common/color.dart';
import 'common/theme.dart';

void main() {
WidgetsFlutterBinding.ensureInitialized();
buildLogger(false);
logger.i("Logger initialized");


var providers = [
Provider(create: (context) => const VersionService()),
Provider(create: (context) => const WalletService())
Expand Down
1 change: 1 addition & 0 deletions webapp/frontend/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ dependencies:
bitcoin_icons: ^0.0.4
intl: ^0.19.0
decimal: ^2.3.3
logger: ^2.0.2+1

dev_dependencies:
flutter_test:
Expand Down

0 comments on commit 3e7bb98

Please sign in to comment.