Files
workavia-mail-front/core/lib/utils/app_logger.dart
T

76 lines
1.8 KiB
Dart

import 'dart:async';
import 'package:core/utils/platform_info.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
final logHistory = _Dispatcher('');
void log(String? value, {Level level = Level.info}) {
// if (!kDebugMode) return;
String logsStr = value ?? '';
logHistory.value = '$logsStr\n${logHistory.value}';
if (PlatformInfo.isWeb) {
switch (level) {
case Level.wtf:
logsStr = '\x1B[31m!!!CRITICAL!!! $logsStr\x1B[0m';
break;
case Level.error:
logsStr = '\x1B[31m$logsStr\x1B[0m';
break;
case Level.warning:
logsStr = '\x1B[33m$logsStr\x1B[0m';
break;
case Level.info:
logsStr = '\x1B[32m$logsStr\x1B[0m';
break;
case Level.debug:
logsStr = '\x1B[34m$logsStr\x1B[0m';
break;
case Level.verbose:
break;
}
} else {
switch (level) {
case Level.error:
logsStr = '[ERROR] $logsStr';
break;
default:
break;
}
}
// ignore: avoid_print
print('[TwakeMail] $logsStr');
}
void logError(String? value) => log(value, level: Level.error);
// Take from: https://flutter.dev/docs/testing/errors
void initLogger(VoidCallback runApp) {
runZonedGuarded(() async {
WidgetsFlutterBinding.ensureInitialized();
FlutterError.onError = (details) {
FlutterError.dumpErrorToConsole(details);
logError('AppLogger::initLogger::runZonedGuarded:FlutterError.onError: ${details.stack.toString()}');
};
runApp.call();
}, (error, stack) {
logError('AppLogger::initLogger::runZonedGuarded:onError: $error | stack: $stack');
});
}
class _Dispatcher extends ValueNotifier<String> {
_Dispatcher(String value) : super(value);
}
enum Level {
wtf,
error,
warning,
info,
debug,
verbose,
}