From e7016ccfe29e7508a83dae29438933c582906d6b Mon Sep 17 00:00:00 2001 From: xkeyC <3334969096@qq.com> Date: Fri, 1 Mar 2024 20:59:43 +0800 Subject: [PATCH] output log to files --- lib/api/analytics.dart | 2 +- lib/base/ui.dart | 6 ++++++ lib/base/ui_model.dart | 5 +++++ lib/common/conf/app_conf.dart | 17 +++++++++++++++++ lib/common/conf/binary_conf.dart | 4 ++-- lib/common/conf/url_conf.dart | 2 +- lib/common/helper/log_helper.dart | 2 +- lib/common/helper/system_helper.dart | 2 +- lib/common/io/aria2c.dart | 9 +++++++-- lib/common/utils/base_utils.dart | 9 ++------- lib/common/utils/log.dart | 19 +++++++++++++++++++ lib/common/win32/credentials.dart | 2 +- .../game_doctor/game_doctor_ui_model.dart | 5 +++-- .../localization/localization_ui_model.dart | 3 ++- lib/ui/home/webview/webview.dart | 1 + pubspec.yaml | 1 + 16 files changed, 70 insertions(+), 19 deletions(-) create mode 100644 lib/common/utils/log.dart diff --git a/lib/api/analytics.dart b/lib/api/analytics.dart index 4fd074f..cd0adfb 100644 --- a/lib/api/analytics.dart +++ b/lib/api/analytics.dart @@ -1,7 +1,7 @@ import 'package:flutter/foundation.dart'; import 'package:starcitizen_doctor/common/conf/url_conf.dart'; import 'package:starcitizen_doctor/common/io/rs_http.dart'; -import 'package:starcitizen_doctor/common/utils/base_utils.dart'; +import 'package:starcitizen_doctor/common/utils/log.dart'; class AnalyticsApi { static touch(String key) async { diff --git a/lib/base/ui.dart b/lib/base/ui.dart index 7d91ac8..683aaf8 100644 --- a/lib/base/ui.dart +++ b/lib/base/ui.dart @@ -2,6 +2,8 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:starcitizen_doctor/main.dart'; import 'package:starcitizen_doctor/widgets/my_page_route.dart'; import 'package:window_manager/window_manager.dart'; +import '../common/utils/log.dart' as log_utils; + import 'dart:ui' as ui; import 'ui_model.dart'; @@ -178,4 +180,8 @@ abstract class BaseUI makeSvgColor(Color color, {BlendMode blendMode = BlendMode.color}) { return ui.ColorFilter.mode(color, blendMode); } + + dPrint(src) { + log_utils.dPrint("<$runtimeType> $src"); + } } diff --git a/lib/base/ui_model.dart b/lib/base/ui_model.dart index 407ffad..c755e65 100644 --- a/lib/base/ui_model.dart +++ b/lib/base/ui_model.dart @@ -2,6 +2,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:grpc/grpc.dart'; import 'ui.dart'; +import '../common/utils/log.dart' as log_utils; export '../common/utils/base_utils.dart'; export 'ui.dart'; @@ -133,4 +134,8 @@ class BaseUIModel extends ChangeNotifier { dismissKeyBoard() { FocusManager.instance.primaryFocus?.unfocus(); } + + dPrint(src) { + log_utils.dPrint("<$runtimeType> $src"); + } } diff --git a/lib/common/conf/app_conf.dart b/lib/common/conf/app_conf.dart index 8b35444..e1d6b44 100644 --- a/lib/common/conf/app_conf.dart +++ b/lib/common/conf/app_conf.dart @@ -10,6 +10,7 @@ import 'package:starcitizen_doctor/api/api.dart'; import 'package:starcitizen_doctor/common/helper/system_helper.dart'; import 'package:starcitizen_doctor/common/io/rs_http.dart'; import 'package:starcitizen_doctor/common/rust/frb_generated.dart'; +import 'package:starcitizen_doctor/common/utils/log.dart'; import 'package:starcitizen_doctor/data/app_version_data.dart'; import 'package:starcitizen_doctor/global_ui_model.dart'; import 'package:starcitizen_doctor/base/ui.dart'; @@ -27,6 +28,10 @@ class AppConf { static late final String applicationSupportDir; + static late final String applicationBinaryModuleDir; + + static File? appLogFile; + static AppVersionData? networkVersionData; static bool offlineMode = false; @@ -51,9 +56,21 @@ class AppConf { } catch (_) {} /// init Data + final userProfileDir = Platform.environment["USERPROFILE"]; applicationSupportDir = (await getApplicationSupportDirectory()).absolute.path; + final logFile = File( + "$applicationSupportDir\\logs\\${DateTime.now().millisecondsSinceEpoch}.log"); + await logFile.create(recursive: true); + appLogFile = logFile; + if (AppConf.isMSE && userProfileDir != null) { + applicationBinaryModuleDir = + "$userProfileDir\\AppData\\Local\\Temp\\SCToolbox\\modules"; + } else { + applicationBinaryModuleDir = "$applicationSupportDir\\modules"; + } dPrint("applicationSupportDir == $applicationSupportDir"); + dPrint("applicationBinaryModuleDir == $applicationBinaryModuleDir"); try { Hive.init("$applicationSupportDir/db"); final box = await Hive.openBox("app_conf"); diff --git a/lib/common/conf/binary_conf.dart b/lib/common/conf/binary_conf.dart index 96025ed..5b5fd80 100644 --- a/lib/common/conf/binary_conf.dart +++ b/lib/common/conf/binary_conf.dart @@ -3,7 +3,7 @@ import 'dart:io'; import 'package:archive/archive.dart'; import 'package:flutter/services.dart'; import 'package:starcitizen_doctor/common/conf/app_conf.dart'; -import 'package:starcitizen_doctor/common/utils/base_utils.dart'; +import 'package:starcitizen_doctor/common/utils/log.dart'; class BinaryModuleConf { static const _modules = { @@ -11,7 +11,7 @@ class BinaryModuleConf { }; static Future extractModule(List modules) async { - final workingDir = "${AppConf.applicationSupportDir}\\modules"; + final workingDir = AppConf.applicationBinaryModuleDir; for (var m in _modules.entries) { if (!modules.contains(m.key)) continue; final name = m.key; diff --git a/lib/common/conf/url_conf.dart b/lib/common/conf/url_conf.dart index 7889ec2..27d01fa 100644 --- a/lib/common/conf/url_conf.dart +++ b/lib/common/conf/url_conf.dart @@ -1,6 +1,6 @@ -import 'package:starcitizen_doctor/base/ui_model.dart'; import 'package:starcitizen_doctor/common/io/rs_http.dart'; import 'package:starcitizen_doctor/common/rust/http_package.dart'; +import 'package:starcitizen_doctor/common/utils/log.dart'; class URLConf { /// HOME API diff --git a/lib/common/helper/log_helper.dart b/lib/common/helper/log_helper.dart index f5c01d1..64b3ffa 100644 --- a/lib/common/helper/log_helper.dart +++ b/lib/common/helper/log_helper.dart @@ -2,8 +2,8 @@ import 'dart:convert'; import 'dart:io'; import 'package:hive/hive.dart'; +import 'package:starcitizen_doctor/common/utils/log.dart'; -import '../utils/base_utils.dart'; class SCLoggerHelper { static Future getLogFilePath() async { diff --git a/lib/common/helper/system_helper.dart b/lib/common/helper/system_helper.dart index 9da4e68..c3c7509 100644 --- a/lib/common/helper/system_helper.dart +++ b/lib/common/helper/system_helper.dart @@ -1,7 +1,7 @@ import 'dart:io'; import 'package:hive/hive.dart'; -import 'package:starcitizen_doctor/common/utils/base_utils.dart'; +import 'package:starcitizen_doctor/common/utils/log.dart'; class SystemHelper { static String powershellPath = "powershell.exe"; diff --git a/lib/common/io/aria2c.dart b/lib/common/io/aria2c.dart index 674569d..83ee7a5 100644 --- a/lib/common/io/aria2c.dart +++ b/lib/common/io/aria2c.dart @@ -5,19 +5,19 @@ import 'package:aria2/aria2.dart'; import 'package:flutter/foundation.dart'; import 'package:hive/hive.dart'; import 'package:starcitizen_doctor/api/api.dart'; -import 'package:starcitizen_doctor/base/ui.dart'; import 'package:starcitizen_doctor/common/conf/app_conf.dart'; import 'package:starcitizen_doctor/common/conf/binary_conf.dart'; import 'package:starcitizen_doctor/common/helper/system_helper.dart'; import 'package:starcitizen_doctor/common/rust/api/process_api.dart' as rs_process; +import 'package:starcitizen_doctor/common/utils/log.dart'; class Aria2cManager { static bool _isDaemonRunning = false; static final String _aria2cDir = - "${AppConf.applicationSupportDir}\\modules\\aria2c"; + "${AppConf.applicationBinaryModuleDir}\\aria2c"; static Aria2c? _aria2c; @@ -86,6 +86,8 @@ class Aria2cManager { ], workingDirectory: _aria2cDir); + String launchError = ""; + stream.listen((event) { dPrint("Aria2cManager.rs_process event === $event"); if (event.startsWith("output:")) { @@ -95,14 +97,17 @@ class Aria2cManager { } else if (event.startsWith("error:")) { _isDaemonRunning = false; _aria2c = null; + launchError = event; } else if (event.startsWith("exit:")) { _isDaemonRunning = false; _aria2c = null; + launchError = event; } }); while (true) { if (_isDaemonRunning) return; + if (launchError.isNotEmpty) throw launchError; await Future.delayed(const Duration(milliseconds: 100)); } } diff --git a/lib/common/utils/base_utils.dart b/lib/common/utils/base_utils.dart index cb97c1e..ef64ef9 100644 --- a/lib/common/utils/base_utils.dart +++ b/lib/common/utils/base_utils.dart @@ -1,16 +1,11 @@ +import 'dart:async'; + import 'package:fluent_ui/fluent_ui.dart'; -import 'package:flutter/foundation.dart'; import 'package:flutter/rendering.dart'; import 'dart:ui' as ui; import 'package:flutter/services.dart'; -void dPrint(src) { - if (kDebugMode) { - print(src); - } -} - Future showToast(BuildContext context, String msg, {BoxConstraints? constraints, String? title}) async { return showBaseDialog(context, diff --git a/lib/common/utils/log.dart b/lib/common/utils/log.dart new file mode 100644 index 0000000..2485901 --- /dev/null +++ b/lib/common/utils/log.dart @@ -0,0 +1,19 @@ +import 'dart:io'; + +import 'package:flutter/foundation.dart'; +import 'package:synchronized/synchronized.dart'; + +import '../conf/app_conf.dart'; + +var _logLock = Lock(); + +void dPrint(src) async { + if (kDebugMode) { + print(src); + } + try { + await _logLock.synchronized(() async { + await AppConf.appLogFile?.writeAsString("$src\n", mode: FileMode.append); + }); + } catch (_) {} +} diff --git a/lib/common/win32/credentials.dart b/lib/common/win32/credentials.dart index c1a9d97..fac568a 100644 --- a/lib/common/win32/credentials.dart +++ b/lib/common/win32/credentials.dart @@ -8,9 +8,9 @@ import 'dart:convert'; import 'dart:ffi'; import 'package:ffi/ffi.dart'; +import 'package:starcitizen_doctor/common/utils/log.dart'; import 'package:win32/win32.dart'; -import '../utils/base_utils.dart'; class Win32Credentials { static void write( diff --git a/lib/ui/home/game_doctor/game_doctor_ui_model.dart b/lib/ui/home/game_doctor/game_doctor_ui_model.dart index 00183ab..2ba6a9e 100644 --- a/lib/ui/home/game_doctor/game_doctor_ui_model.dart +++ b/lib/ui/home/game_doctor/game_doctor_ui_model.dart @@ -162,9 +162,10 @@ class GameDoctorUIModel extends BaseUIModel { var result = await Process.run('powershell', [ "(fsutil fsinfo sectorinfo $element: | Select-String 'PhysicalBytesPerSectorForPerformance').ToString().Split(':')[1].Trim()" ]); - dPrint(result.stdout); + dPrint( + "fsutil info sector info: ->>> ${result.stdout.toString().trim()}"); if (result.stderr == "") { - final rs = result.stdout.toString(); + final rs = result.stdout.toString().trim(); final physicalBytesPerSectorForPerformance = (int.tryParse(rs) ?? 0); if (physicalBytesPerSectorForPerformance > 4096) { checkResult?.add(MapEntry("nvme_PhysicalBytes", element)); diff --git a/lib/ui/home/localization/localization_ui_model.dart b/lib/ui/home/localization/localization_ui_model.dart index f93070e..36ea5a2 100644 --- a/lib/ui/home/localization/localization_ui_model.dart +++ b/lib/ui/home/localization/localization_ui_model.dart @@ -12,6 +12,7 @@ import 'package:starcitizen_doctor/common/helper/system_helper.dart'; import 'package:starcitizen_doctor/common/io/rs_http.dart'; import 'package:starcitizen_doctor/data/sc_localization_data.dart'; import 'package:url_launcher/url_launcher_string.dart'; +import 'package:starcitizen_doctor/common/utils/log.dart' as log_utils; class LocalizationUIModel extends BaseUIModel { final String scInstallPath; @@ -372,7 +373,7 @@ class LocalizationUIModel extends BaseUIModel { updateInfo[value] = hasUpdate; } } - dPrint("checkLocalizationUpdates ==== $updateInfo"); + log_utils.dPrint("checkLocalizationUpdates ==== $updateInfo"); for (var v in updateInfo.entries) { if (v.value) { for (var element in AppConf.gameChannels) { diff --git a/lib/ui/home/webview/webview.dart b/lib/ui/home/webview/webview.dart index 13489f4..2f2b47d 100644 --- a/lib/ui/home/webview/webview.dart +++ b/lib/ui/home/webview/webview.dart @@ -11,6 +11,7 @@ import 'package:local_auth/local_auth.dart'; import 'package:starcitizen_doctor/common/conf/app_conf.dart'; import 'package:starcitizen_doctor/common/conf/url_conf.dart'; import 'package:starcitizen_doctor/common/io/rs_http.dart'; +import 'package:starcitizen_doctor/common/utils/log.dart'; import 'package:starcitizen_doctor/common/win32/credentials.dart'; import 'package:starcitizen_doctor/data/app_web_localization_versions_data.dart'; diff --git a/pubspec.yaml b/pubspec.yaml index 64eb468..57d4934 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -76,6 +76,7 @@ dependencies: #git: https://github.com/xkeyC/dart_aria2_rpc.git path: ../../xkeyC/dart_aria2_rpc intl: ^0.18.0 + synchronized: ^3.1.0+1 dependency_overrides: http: ^1.1.2