Android Sentry 系列技術貼,第二個模塊結合業務需求配置選項

根據業務需求自行配置

SentryAndroid.init(ApplicationSingleton.getInstance.getApplication(), new Sentry.OptionsConfiguration() {

@Override

? ? ? ? ? ? ? ? ? ? public void configure(@NotNull SentryAndroidOptions options) {

? ? ? ? ? ? ? ? ? ? ? ? options.setDsn("根據自己的項目配置Dsn");

? ? ? ? ? ? ? ? ? ? ? ? // 啟用后,堆棧跟蹤會自動附加到所有記錄的消息中。堆棧跟蹤始終附加到異常;但是,設置此選項后,堆棧跟蹤也會隨消息一起發送。例如,此選項意味著堆棧跟蹤顯示在所有日志消息旁邊。

? ? ? ? ? ? ? ? ? ? ? ? //這個選項是on默認的。

? ? ? ? ? ? ? ? ? ? ? ? //Sentry 中的分組對于有堆棧跟蹤和沒有堆棧跟蹤的事件是不同的。因此,當您為某些事件啟用或禁用此標志時,您將獲得新的組。

? ? ? ? ? ? ? ? ? ? ? ? // options.setAttachStacktrace(true);

? ? ? ? ? ? ? ? ? ? ? ? // 此參數控制集成是否應捕獲 HTTP 請求主體。它可以設置為以下值之一:

? ? ? ? ? ? ? ? ? ? ? ? //

? ? ? ? ? ? ? ? ? ? ? ? //never: 永遠不會發送請求體。

? ? ? ? ? ? ? ? ? ? ? ? //small:只會捕獲小的請求體。small 的截止值取決于 SDK(通常為 4KB)。

? ? ? ? ? ? ? ? ? ? ? ? //medium:將捕獲中小型請求(通常為 10KB)。

? ? ? ? ? ? ? ? ? ? ? ? //always: SDK 會一直抓取請求體,只要Sentry 能理解它。

? ? ? ? ? ? ? ? ? ? ? ? options.setMaxRequestBodySize(SentryOptions.RequestSize.ALWAYS);

? ? ? ? ? ? ? ? ? ? ? ? // 將此布爾值設置為false禁用發送客戶端報告。客戶端報告是一種協議功能,可讓客戶端向 Sentry 發送有關其自身的狀態報告。它們目前主要用于為從未發送過的事件發出結果。

? ? ? ? ? ? ? ? ? ? ? ? // 一定要關閉!!!.和爽哥對過,如果打開會把自己的信息發送給sentry,涉及到我們的數據安全問題以及,信息跨境問題.

? ? ? ? ? ? ? ? ? ? ? ? options.setSendClientReports(false);

? ? ? ? ? ? ? ? ? ? ? ? // 自動添加面包屑

? ? ? ? ? ? ? ? ? ? ? ? options.enableAllAutoBreadcrumbs(true);

? ? ? ? ? ? ? ? ? ? ? ? // 全面展示時間

? ? ? ? ? ? ? ? ? ? ? ? //(6.14.0 版新增)

? ? ? ? ? ? ? ? ? ? ? ? //Time to full display 通過為 Activity 的每次啟動添加一個跨度,可以深入了解您的 Activity 啟動和加載其所有內容需要多長時間。SDK 將跨度操作ui.load.full-display和跨度描述設置為 Activity 的名稱后跟full display,例如,MainActivity full display。

? ? ? ? ? ? ? ? ? ? ? ? //Span 在每個 Activity 啟動時開始,定義為第一個 Activity 的應用程序啟動,以及onPause每個后續 Activity 啟動的前一個 Activity 的方法。

? ? ? ? ? ? ? ? ? ? ? ? //Time to full display 默認情況下是禁用的,但您可以通過設置啟用它:

? ? ? ? ? ? ? ? ? ? ? ? options.setEnableTimeToFullDisplayTracing(true);

? ? ? ? ? ? ? ? ? ? ? ? // 為用戶交互啟用自動面包屑(點擊、滑動、滾動)

? ? ? ? ? ? ? ? ? ? ? ? options.setEnableUserInteractionTracing(true);

? ? ? ? ? ? ? ? ? ? ? ? // 發生錯誤時截取應用程序的屏幕截圖并將其作為附件包含在內。在我們的屏幕截圖文檔中了解有關使用屏幕截圖豐富事件的更多信息。

? ? ? ? ? ? ? ? ? ? ? ? // https://docs.sentry.io/platforms/android/enriching-events/screenshots/?original_referrer=https%3A%2F%2Fhelp.sentry.io%2F

? ? ? ? ? ? ? ? ? ? ? ? options.setAttachScreenshot(true);

? ? ? ? ? ? ? ? ? ? ? ? // 發生錯誤時呈現應用程序整個視圖層次結構的 JSON 表示并將其作為附件包含在內。在我們的視圖層次結構文檔中了解有關使用視圖層次結構豐富事件的更多信息。

? ? ? ? ? ? ? ? ? ? ? ? // https://docs.sentry.io/platforms/android/enriching-events/viewhierarchy/?original_referrer=https%3A%2F%2Fhelp.sentry.io%2F

? ? ? ? ? ? ? ? ? ? ? ? options.setAttachViewHierarchy(true);

? ? ? ? ? ? ? ? ? ? ? ? // ANR 的監控開關

? ? ? ? ? ? ? ? ? ? ? ? options.setAnrEnabled(true);

? ? ? ? ? ? ? ? ? ? ? ? // 配置錯誤事件的采樣率,范圍為0.0到1.0。默認值是1.0表示發送 100% 的錯誤事件。如果設置為0.1只有 10% 的錯誤事件將被發送。事件是隨機選擇的。

? ? ? ? ? ? ? ? ? ? ? ? // https://docs.sentry.io/platforms/android/configuration/sampling/?original_referrer=https%3A%2F%2Fhelp.sentry.io%2F

? ? ? ? ? ? ? ? ? ? ? ? // 可以根據不同業務需求來調整采樣率,比如在語音房頁面采樣率為1.0.在修改用戶資料頁面采樣率為0.1

? ? ? ? ? ? ? ? ? ? ? ? options.setSampleRate(1.0);

? ? ? ? ? ? ? ? ? ? ? ? // 在開始交易時啟用分析,在生產環境中調整

? ? ? ? ? ? ? ? ? ? ? ? options.setProfilesSampleRate(1.0);

? ? ? ? ? ? ? ? ? ? ? ? // 一個介于 0 和 1 之間的數字,控制將給定交易發送到 Sentry 的百分比機會。(0 代表 0%,而 1 代表 100%。)同樣適用于應用程序中創建的所有交易。tracesSampler必須定義這個或才能啟用 追蹤記錄請求期間發生的事件的過程,通常跨多個服務。.

? ? ? ? ? ? ? ? ? ? ? ? options.setTracesSampleRate(1.0);

? ? ? ? ? ? ? ? ? ? ? ? // 指定在報告 ANR 之前線程應該被阻塞多長時間

? ? ? ? ? ? ? ? ? ? ? ? options.setAnrTimeoutIntervalMillis(3000);

? ? ? ? ? ? ? ? ? ? ? ? //會話

? ? ? ? ? ? ? ? ? ? ? ? //會話表示用戶和應用程序之間的交互。會話包含一個時間戳、一個狀態(會話是否正常或崩潰),并且始終與發布相關聯。大多數哨兵 SDK 可以自動管理會話。

? ? ? ? ? ? ? ? ? ? ? ? //要從健康數據中獲益,您必須至少使用 2.1.0 版本的 Android SDK,并在 SDK 的初始化選項中啟用發布健康指標的收集。默認情況下,在我們的 Android 3.0 及更高版本中會捕獲發布運行狀況,除非您在 SDK 的初始化選項中特別禁用收集它。

? ? ? ? ? ? ? ? ? ? ? ? //默認情況下,一旦應用程序在后臺運行超過 30 秒,會話就會終止。您可以使用名為 的選項更改超時sessionTrackingIntervalMillis。它需要以毫秒為單位的數量。例如,將其配置為 60 秒:

? ? ? ? ? ? ? ? ? ? ? ? options.setSessionTrackingIntervalMillis(60000);

? ? ? ? ? ? ? ? ? ? ? ? // 設置為 時true,SDK 將向 Sentry 發送會話事件。所有瀏覽器 SDK 都支持這一點,每次頁面加載和頁面導航到 Sentry 都會發出一個會話。在移動 SDK 中,當應用進入后臺超過 30 秒時,會話將結束。

? ? ? ? ? ? ? ? ? ? ? ? options.setEnableAutoSessionTracking(true);

? ? ? ? ? ? ? ? ? ? ? ? // 打開或關閉調試模式。如果啟用調試,如果發送事件出現問題,SDK 將嘗試打印出有用的調試信息。默認值為始終false。通常不建議在生產中打開它,盡管打開debug模式不會引起任何安全問題。

? ? ? ? ? ? ? ? ? ? ? ? options.setDebug(DebugLog.logIsOpen);

? ? ? ? ? ? ? ? ? ? ? ? // 啟用debug模式使 SDK 生成盡可能多的診斷數據。但是,如果您希望降低 Sentry SDK 診斷日志的詳細程度,請配置此選項以設置適當的級別:

? ? ? ? ? ? ? ? ? ? ? ? //

? ? ? ? ? ? ? ? ? ? ? ? //debug: default最詳細的模式

? ? ? ? ? ? ? ? ? ? ? ? //info:信息性消息

? ? ? ? ? ? ? ? ? ? ? ? //warning: 警告某些事情可能不對

? ? ? ? ? ? ? ? ? ? ? ? //error: 只打印SDK內部錯誤

? ? ? ? ? ? ? ? ? ? ? ? //fatal: 只打印嚴重錯誤

? ? ? ? ? ? ? ? ? ? ? ? options.setDiagnosticLevel(SentryLevel.DEBUG);

? ? ? ? ? ? ? ? ? ? ? ? // 設置環境。此字符串是自由格式的,默認情況下未設置。一個版本可以與多個環境相關聯,以在 UI 中將它們分開(想想stagingvsprod或類似的)。

? ? ? ? ? ? ? ? ? ? ? ? options.setEnvironment(Constant.getAppEnvEnum().getBuildTypePrefix());

? ? ? ? ? ? ? ? ? ? ? ? // https://docs.sentry.io/product/security/mobile-privacy/?original_referrer=https%3A%2F%2Fhelp.sentry.io%2F

//? ? ? ? ? ? ? ? ? ? ? ? 如果啟用此標志,則活動集成會添加某些個人身份信息 (PII)。默認情況下,不發送此類數據。

//? ? ? ? ? ? ? ? ? ? ? ? 如果您在移動應用程序中使用 Sentry,請閱讀我們關于移動數據隱私的常見問題解答,以幫助了解 Apple App Store 和 Google Play 應用程序隱私詳細信息。

//? ? ? ? ? ? ? ? ? ? ? ? 這個選項是off默認的。如果您啟用此選項,請務必使用我們的敏感數據管理功能手動刪除您不想發送的內容。https://docs.sentry.io/platforms/android/data-management/sensitive-data/

? ? ? ? ? ? ? ? ? ? ? ? options.setSendDefaultPii(true);

? ? ? ? ? ? ? ? ? ? ? ? // Activity 的檢測一旦啟用,就會為每次啟動的 Activity 捕獲事務。SDK將Transaction名稱設置為Activity的名稱,例如 ,MainActivity將Transaction操作設置為ui.load。

? ? ? ? ? ? ? ? ? ? ? ? //事務在onCreate調用每個 Activity 的方法之前開始。

? ? ? ? ? ? ? ? ? ? ? ? //默認情況下啟用 Activity 的檢測,

? ? ? ? ? ? ? ? ? ? ? ? // 事務在每個 Activity 的onResume方法執行后完成。 交易自動完成,但您可以通過設置禁用它

? ? ? ? ? ? ? ? ? ? ? ? options.setEnableActivityLifecycleTracingAutoFinish(true);

? ? ? ? ? ? ? ? ? ? ? ? // 開啟ActivityLifecycle Tracing

? ? ? ? ? ? ? ? ? ? ? ? options.setEnableAutoActivityLifecycleTracing(true);

? ? ? ? ? ? ? ? ? ? ? ? // 開啟ActivityLifecycle面包屑

? ? ? ? ? ? ? ? ? ? ? ? options.setEnableActivityLifecycleBreadcrumbs(true);

? ? ? ? ? ? ? ? ? ? ? ? //

? ? ? ? ? ? ? ? ? ? ? ? options.addIntegration(new FragmentLifecycleIntegration(ApplicationSingleton.getInstance.getApplication(), true, true));

? ? ? ? ? ? ? ? ? ? ? ? // 此函數使用特定于 SDK 的消息或錯誤事件對象調用,并可以返回修改后的事件對象,或null跳過報告事件。例如,這可用于在發送前手動剝離 PII。

? ? ? ? ? ? ? ? ? ? ? ? options.setBeforeSend(new SentryOptions.BeforeSendCallback() {

@Override

? ? ? ? ? ? ? ? ? ? ? ? ? ? public @Nullable SentryEventexecute(@NotNull SentryEvent event, @NotNull Hint hint) {

// 這個方法是在主線程中執行

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? return event;

? ? ? ? ? ? ? ? ? ? ? ? ? ? }

});

? ? ? ? ? ? ? ? ? ? ? ? // 該函數使用 SDK 特定的交易事件對象調用,可以返回修改后的交易事件對象,或者null跳過事件上報。一種可能使用的方法是在發送之前手動剝離 PII。

? ? ? ? ? ? ? ? ? ? ? ? options.setBeforeSendTransaction(new SentryOptions.BeforeSendTransactionCallback() {

@Override

? ? ? ? ? ? ? ? ? ? ? ? ? ? public @Nullable SentryTransactionexecute(@org.jetbrains.annotations.NotNull SentryTransaction transaction, @org.jetbrains.annotations.NotNull Hint hint) {

return transaction;

? ? ? ? ? ? ? ? ? ? ? ? ? ? }

});

? ? ? ? ? ? ? ? ? ? ? ? // 在將面包屑添加到范圍之前,使用特定于 SDK 的面包屑對象調用此函數。當函數沒有返回任何內容時,面包屑將被刪除。要傳遞面包屑,請返回第一個參數,其中包含面包屑對象。回調通常會獲得第二個參數(稱為“提示”),其中包含創建面包屑的原始對象,以進一步自定義面包屑的外觀。

? ? ? ? ? ? ? ? ? ? ? ? options.setBeforeBreadcrumb(new SentryOptions.BeforeBreadcrumbCallback() {

@Override

? ? ? ? ? ? ? ? ? ? ? ? ? ? public @Nullable Breadcrumbexecute(@org.jetbrains.annotations.NotNull Breadcrumb breadcrumb, @org.jetbrains.annotations.NotNull Hint hint) {

return breadcrumb;

? ? ? ? ? ? ? ? ? ? ? ? ? ? }

});

? ? ? ? ? ? ? ? ? ? ? ? // 自定義上下文允許您將任意數據附加到事件。通常,此上下文在其生命周期中捕獲的任何問題之間共享。您無法搜索這些,但可以在問題頁面上查看它們:附加自定義數據的最佳做法是通過結構化上下文。上下文必須始終是字典或映射,其值可以是任意的。然后,使用setContext并給上下文一個唯一的名稱:

? ? ? ? ? ? ? ? ? ? ? ? Sentry.configureScope(new ScopeCallback() {

@Override

? ? ? ? ? ? ? ? ? ? ? ? ? ? public void run(@org.jetbrains.annotations.NotNull Scope scope) {

}

});

? ? ? ? ? ? ? ? ? ? }

});



設置用戶信息

User user =new User();

user.setId(“”);

user.setName(“”);

Sentry.setUser(user);



設置Tag

Sentry.setTag(key, value);


配置網絡攔截器

OkHttpClient.Builder builder =new OkHttpClient().newBuilder().pingInterval(5, TimeUnit.SECONDS).connectTimeout(30, TimeUnit.SECONDS)// 鏈接服務器超時時間.addInterceptor(new SentryOkHttpInterceptor());// 寫入超時時間

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容