Change initialization and logging
This commit is contained in:
33
lib/core/logger/custom_logger.dart
Normal file
33
lib/core/logger/custom_logger.dart
Normal file
@@ -0,0 +1,33 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:loggy/loggy.dart';
|
||||
|
||||
class FileLogPrinter extends LoggyPrinter {
|
||||
FileLogPrinter(
|
||||
String filePath, {
|
||||
this.minLevel = LogLevel.debug,
|
||||
}) : _logFile = File(filePath);
|
||||
|
||||
final File _logFile;
|
||||
final LogLevel minLevel;
|
||||
|
||||
late final _sink = _logFile.openWrite(
|
||||
mode: FileMode.writeOnly,
|
||||
);
|
||||
|
||||
@override
|
||||
void onLog(LogRecord record) {
|
||||
final time = record.time.toIso8601String().split('T')[1];
|
||||
_sink.writeln("$time - $record");
|
||||
if (record.error != null) {
|
||||
_sink.writeln(record.error);
|
||||
}
|
||||
if (record.stackTrace != null) {
|
||||
_sink.writeln(record.stackTrace);
|
||||
}
|
||||
}
|
||||
|
||||
void dispose() {
|
||||
_sink.close();
|
||||
}
|
||||
}
|
||||
30
lib/core/logger/logger.dart
Normal file
30
lib/core/logger/logger.dart
Normal file
@@ -0,0 +1,30 @@
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:loggy/loggy.dart';
|
||||
|
||||
class Logger {
|
||||
static final app = Loggy("app");
|
||||
static final bootstrap = Loggy("bootstrap");
|
||||
|
||||
static void logFlutterError(FlutterErrorDetails details) {
|
||||
if (details.silent) {
|
||||
return;
|
||||
}
|
||||
|
||||
final description = details.exceptionAsString();
|
||||
|
||||
app.error(
|
||||
'Flutter Error: $description',
|
||||
details.exception,
|
||||
details.stack,
|
||||
);
|
||||
}
|
||||
|
||||
static bool logPlatformDispatcherError(Object error, StackTrace stackTrace) {
|
||||
app.error(
|
||||
'PlatformDispatcherError: $error',
|
||||
error,
|
||||
stackTrace,
|
||||
);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
62
lib/core/logger/logger_controller.dart
Normal file
62
lib/core/logger/logger_controller.dart
Normal file
@@ -0,0 +1,62 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:flutter_loggy/flutter_loggy.dart';
|
||||
import 'package:hiddify/core/logger/custom_logger.dart';
|
||||
import 'package:hiddify/utils/custom_loggers.dart';
|
||||
import 'package:loggy/loggy.dart';
|
||||
|
||||
class LoggerController extends LoggyPrinter with InfraLogger {
|
||||
LoggerController(
|
||||
this.consolePrinter,
|
||||
this.otherPrinters,
|
||||
);
|
||||
|
||||
final LoggyPrinter consolePrinter;
|
||||
final Map<String, LoggyPrinter> otherPrinters;
|
||||
|
||||
static LoggerController get instance => _instance;
|
||||
|
||||
static late LoggerController _instance;
|
||||
|
||||
static void init(String appLogPath) {
|
||||
_instance = LoggerController(
|
||||
const PrettyDeveloperPrinter(),
|
||||
{"app": FileLogPrinter(appLogPath)},
|
||||
);
|
||||
Loggy.initLoggy(logPrinter: _instance);
|
||||
}
|
||||
|
||||
static Future<void> postInit(bool debugMode) async {
|
||||
final logLevel = debugMode ? LogLevel.all : LogLevel.info;
|
||||
final logToFile = debugMode || (!Platform.isAndroid && !Platform.isIOS);
|
||||
|
||||
if (!logToFile) _instance.removePrinter("app");
|
||||
|
||||
Loggy.initLoggy(
|
||||
logPrinter: _instance,
|
||||
logOptions: LogOptions(logLevel),
|
||||
);
|
||||
}
|
||||
|
||||
void addPrinter(String name, LoggyPrinter printer) {
|
||||
loggy.debug("adding [$name] printer");
|
||||
otherPrinters.putIfAbsent(name, () => printer);
|
||||
}
|
||||
|
||||
void removePrinter(String name) {
|
||||
loggy.debug("removing [$name] printer");
|
||||
final printer = otherPrinters[name];
|
||||
if (printer case FileLogPrinter()) {
|
||||
printer.dispose();
|
||||
}
|
||||
otherPrinters.remove(name);
|
||||
}
|
||||
|
||||
@override
|
||||
void onLog(LogRecord record) {
|
||||
consolePrinter.onLog(record);
|
||||
for (final printer in otherPrinters.values) {
|
||||
printer.onLog(record);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user