mirror of
https://github.com/bggRGjQaUbCoE/PiliPlus.git
synced 2026-04-20 03:06:59 +08:00
refa: logfile (#1764)
* refa: logfile * opt: log page * opt: raf log file * remove old log * update Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me> --------- Co-authored-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
committed by
GitHub
parent
255e39b709
commit
0d273f6909
103
lib/utils/json_file_handler.dart
Normal file
103
lib/utils/json_file_handler.dart
Normal file
@@ -0,0 +1,103 @@
|
||||
import 'dart:convert';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:PiliPlus/services/logger.dart' show LoggerUtils;
|
||||
import 'package:catcher_2/model/platform_type.dart';
|
||||
import 'package:catcher_2/model/report.dart';
|
||||
import 'package:catcher_2/model/report_handler.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class JsonFileHandler extends ReportHandler {
|
||||
final bool enableDeviceParameters;
|
||||
final bool enableApplicationParameters;
|
||||
final bool enableStackTrace;
|
||||
final bool enableCustomParameters;
|
||||
final bool printLogs;
|
||||
final bool handleWhenRejected;
|
||||
|
||||
static late Future<RandomAccessFile> _future;
|
||||
|
||||
JsonFileHandler._({
|
||||
this.enableDeviceParameters = true,
|
||||
this.enableApplicationParameters = true,
|
||||
this.enableStackTrace = true,
|
||||
this.enableCustomParameters = true,
|
||||
this.printLogs = false,
|
||||
this.handleWhenRejected = false,
|
||||
});
|
||||
|
||||
static Future<JsonFileHandler?> init({
|
||||
bool enableDeviceParameters = true,
|
||||
bool enableApplicationParameters = true,
|
||||
bool enableStackTrace = true,
|
||||
bool enableCustomParameters = true,
|
||||
bool printLogs = false,
|
||||
bool handleWhenRejected = false,
|
||||
}) async {
|
||||
try {
|
||||
final raf = await (await LoggerUtils.getLogsPath()).open(
|
||||
mode: FileMode.writeOnlyAppend,
|
||||
);
|
||||
await raf.writeFrom(const []);
|
||||
await raf.flush();
|
||||
_future = Future.syncValue(raf);
|
||||
return JsonFileHandler._(
|
||||
enableDeviceParameters: enableDeviceParameters,
|
||||
enableApplicationParameters: enableApplicationParameters,
|
||||
enableStackTrace: enableStackTrace,
|
||||
enableCustomParameters: enableCustomParameters,
|
||||
printLogs: printLogs,
|
||||
handleWhenRejected: handleWhenRejected,
|
||||
);
|
||||
} catch (e, s) {
|
||||
debugPrintStack(stackTrace: s, label: e.toString());
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
static Future<RandomAccessFile> add(
|
||||
Future<RandomAccessFile> Function(RandomAccessFile) onValue,
|
||||
) {
|
||||
return _future = _future.then(onValue);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<bool> handle(Report report, BuildContext? context) async {
|
||||
try {
|
||||
await _processReport(report);
|
||||
return true;
|
||||
} catch (exc, stackTrace) {
|
||||
_printLog('Exception occurred: $exc stack: $stackTrace');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _processReport(Report report) {
|
||||
_printLog('Writing report to file');
|
||||
final json = report.toJson(
|
||||
enableDeviceParameters: enableDeviceParameters,
|
||||
enableApplicationParameters: enableApplicationParameters,
|
||||
enableStackTrace: enableStackTrace,
|
||||
enableCustomParameters: enableCustomParameters,
|
||||
);
|
||||
return add((raf) => raf.writeString('${jsonEncode(json)}\n'));
|
||||
}
|
||||
|
||||
void _printLog(String log) {
|
||||
if (printLogs) {
|
||||
logger.info(log);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
List<PlatformType> getSupportedPlatforms() => const [
|
||||
PlatformType.android,
|
||||
PlatformType.iOS,
|
||||
PlatformType.linux,
|
||||
PlatformType.macOS,
|
||||
PlatformType.windows,
|
||||
];
|
||||
|
||||
@override
|
||||
bool shouldHandleWhenRejected() => handleWhenRejected;
|
||||
}
|
||||
Reference in New Issue
Block a user