refactor: remove CrashReporter and related logging components
- Removed CrashReporter interface and its implementation, SentryCrashReporter. - Deleted log buffering functionality and associated LogBuffer class. - Updated LoggerAppLogger to eliminate dependencies on removed components. - Simplified logging structure to focus on AppLogger and sensitive data scrubbing. - Adjusted AppEnv to remove Sentry-related configurations. - Refactored tests to align with the new logging architecture.
This commit is contained in:
+8
-50
@@ -1,6 +1,6 @@
|
||||
/// 三个入口共用的启动编排。
|
||||
/// 唯一入口共用的启动编排。
|
||||
///
|
||||
/// 来源:08(多环境)、13(Sentry / 日志)、12(全局错误)、03(Riverpod 装配)。
|
||||
/// 来源:08(多环境)、12(全局错误)、03(Riverpod 装配)。
|
||||
library;
|
||||
|
||||
import 'package:app/src/app_widget.dart';
|
||||
@@ -20,12 +20,11 @@ import 'package:feature_auth/feature_auth.dart';
|
||||
import 'package:feature_home/feature_home.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:sentry_flutter/sentry_flutter.dart';
|
||||
|
||||
/// TODO(app): 换成 package_info_plus 读真实版本,现在写死会在灰度期骗人。
|
||||
const String _appVersion = '1.0.0+1';
|
||||
|
||||
/// 全部三个 main_*.dart 都只调这一个函数。
|
||||
/// 唯一 `main.dart` 调用的启动函数。
|
||||
///
|
||||
/// ---------------------------------------------------------------------------
|
||||
/// 这个函数是**整个仓库唯一一处知道所有包的地方**。各个 core_* 只声明自己需要
|
||||
@@ -40,14 +39,7 @@ Future<void> bootstrap(AppEnv env) async {
|
||||
// 装一次全局单例,供拿不到 Ref 的 TokenRefresher 用;重复调用会抛错。
|
||||
AppEnv.install(env);
|
||||
|
||||
final LogBuffer buffer = LogBuffer();
|
||||
final AppLogger logger = LoggerAppLogger(env: env, buffer: buffer);
|
||||
|
||||
// dsn 为空(dev 默认)时连 SDK 都不初始化:开发期的噪音不该混进线上数据。
|
||||
final bool sentryEnabled = env.sentryDsn.isNotEmpty;
|
||||
final CrashReporter reporter = sentryEnabled
|
||||
? const SentryCrashReporter()
|
||||
: const NoopCrashReporter();
|
||||
final AppLogger logger = LoggerAppLogger(env: env);
|
||||
|
||||
final Prefs prefs = Prefs();
|
||||
final ClientInfo clientInfo = ClientInfo(
|
||||
@@ -62,13 +54,11 @@ Future<void> bootstrap(AppEnv env) async {
|
||||
|
||||
Widget buildApp() {
|
||||
return ProviderScope(
|
||||
observers: <ProviderObserver>[ErrorObserver(logger: logger, reporter: reporter)],
|
||||
observers: <ProviderObserver>[ErrorObserver(logger: logger)],
|
||||
overrides: [
|
||||
// --- 基础设施:值已经在上面造好了,直接注入 -----------------------
|
||||
appEnvProvider.overrideWithValue(env), // core_foundation
|
||||
appLoggerProvider.overrideWithValue(logger), // core_logging
|
||||
logBufferProvider.overrideWithValue(buffer), // core_logging(和 beforeSend 同一实例)
|
||||
crashReporterProvider.overrideWithValue(reporter), // core_logging
|
||||
prefsProvider.overrideWithValue(prefs), // core_storage
|
||||
clientInfoProvider.overrideWithValue(clientInfo), // core_network 端口
|
||||
// --- 端口:接口在 core_*,实现在能依赖 core_network 的这一层 --------
|
||||
@@ -87,10 +77,7 @@ Future<void> bootstrap(AppEnv env) async {
|
||||
),
|
||||
sessionObserversProvider.overrideWith(
|
||||
(Ref ref) => <SessionObserver>[
|
||||
AppSessionObserver(
|
||||
analytics: ref.watch(analyticsProvider),
|
||||
reporter: ref.watch(crashReporterProvider),
|
||||
),
|
||||
AppSessionObserver(analytics: ref.watch(analyticsProvider)),
|
||||
],
|
||||
),
|
||||
|
||||
@@ -98,16 +85,8 @@ Future<void> bootstrap(AppEnv env) async {
|
||||
appRoutesProvider.overrideWith(
|
||||
(Ref ref) => <RouteBase>[...buildAuthRoutes(), ...buildHomeRoutes()],
|
||||
),
|
||||
navigatorObserversProvider.overrideWith(
|
||||
(Ref ref) => <NavigatorObserver>[
|
||||
CrashBreadcrumbObserver(ref.watch(crashReporterProvider)),
|
||||
],
|
||||
),
|
||||
routeReporterProvider.overrideWith(
|
||||
(Ref ref) => AppRouteReporter(
|
||||
logger: ref.watch(appLoggerProvider),
|
||||
reporter: ref.watch(crashReporterProvider),
|
||||
),
|
||||
(Ref ref) => AppRouteReporter(logger: ref.watch(appLoggerProvider)),
|
||||
),
|
||||
|
||||
// --- 日志出口:core_network 只知道"往这里写字符串" -------------------
|
||||
@@ -123,26 +102,5 @@ Future<void> bootstrap(AppEnv env) async {
|
||||
);
|
||||
}
|
||||
|
||||
if (!sentryEnabled) {
|
||||
runApp(buildApp());
|
||||
return;
|
||||
}
|
||||
|
||||
await SentryFlutter.init(
|
||||
(SentryFlutterOptions options) {
|
||||
options.dsn = env.sentryDsn;
|
||||
options.environment = env.flavor.name;
|
||||
options.release = 'conti-retail-app@$_appVersion';
|
||||
options.tracesSampleRate = env.isProd ? 0.1 : 1.0;
|
||||
// 合规红线:不自动带用户 IP / 请求头 / cookie。
|
||||
options.sendDefaultPii = false;
|
||||
options.beforeBreadcrumb = scrubBreadcrumb;
|
||||
options.beforeSend = buildScrubEvent(buffer);
|
||||
options.debug = false;
|
||||
},
|
||||
// 用 appRunner 而不是自己写 FlutterError.onError:SentryFlutter 已经在
|
||||
// 里面装好了 Flutter / PlatformDispatcher / Zone 三层钩子,再手写一遍
|
||||
// 会**每个异常上报两次**(13)。
|
||||
appRunner: () => runApp(buildApp()),
|
||||
);
|
||||
runApp(buildApp());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user