--- title: 使用 Sentry 追蹤 APP event and error tags: iOS description: 2019/11/04 --- # 使用 Sentry 追蹤 APP event and error [TOC] Sentry iOS 的 Document 在[這裡](https://docs.sentry.io/clients/cocoa/?_ga=2.228690591.2047469141.1572502794-325005730.1572406972) ## Open a new project 按著網頁上的步驟選擇平台和輸入 project 名字即可生成新的 project ![](https://i.imgur.com/uFj2j3Q.png) ## Configuration Project 生成後會拿到一個該 project的 DSN(Data Source Name)。 按著[文件](https://docs.sentry.io/clients/cocoa/?_ga=2.199317038.1417862060.1572835361-325005730.1572406972)的步驟安裝 SDK 和在 APPDelegate 完成 configuration 即可使用 Sentry 紀錄 APP event. ## Event Sentry 可以自行紀錄 APP 中的事件,類似 Firebase Analytics 的 log event 功能 用法:先創建一個 event 再用 framework 中的 Client singleton send event ``` swift // init 並指定 event 的類型 let event = Event(level: .debug) // 客製化設定 event.message = "Test Message" // 使用 Client send event Client.shared?.send(event: event) { (error) in // Optional callback after event has been sent } ``` ![](https://i.imgur.com/3ou2Pfb.png) ### Event 的設定 #### 類型 Event 的類型有五種,可自行設定 event 的類型 ![](https://i.imgur.com/8UpOluO.png) 不同類型的 event 在 dashboard 由不同顏色的標籤顯示: ![](https://i.imgur.com/jOAIacj.png) #### message Event 的 message 會是 dashboard 上的標題 ![](https://i.imgur.com/RtSkbNj.png) #### extra 可以使用 dictionary 在 event 的 extra 中帶額外的資訊 ``` let event = Event(level: .info) event.message = EVENT_DISABLE_GRAB_ORDER event.extra = ["extraInfo": "fdfdffdffjffhjhjfhdfjfksjf;sjffhkdfjsdjkdjs;kdfjkfjksdljkfjkdldjfkjfklsjfkldjfkldjfkdjflskdjfsklfjsklfjsjfkljfdkfjdkjdflskjf;lsdlfl;sfjdkfjkldjf;dljfdkfljdklfjklj;sdjf;kja;jfkdlj;slkdfjioe;wefkjkldfjds;kf;sjfkldfjsdklfjdklfjdl;fl;sdf;skfjkds;fjkd;lkfjfdfdffdffjffhjhjfhdfjfksjf;sjffhkdfjsdjkdjs;kdfjkfjksdljkfjkdldjfkjfklsjfkldjfkldjfkdjflskdjfsklfjsklfjsjfkljfdkfjdkjdflskjf;lsdlfl;sfjdkfjkldjf;dljfdkfsdljkfjkdldjfkjfklsjfkldjfkldjfkdjflskdjfsklfjsklfjsjfkljfdkfjdkjdflskjf;lsdlfl;sfjdkfjkldjf;dljfdkfljdklfjklj;sdjf;kja;jfkdlj;slkdfjioe;wefkjkldfjds;kf;sjfkldfjsdklfjdklfjdl;fl;sdf;skfjkds;fjkd;lkfjfdfdffdffjffhjhjfhdfjfksjf;sjffhkdfjsdjkdjs;kdfjkfjksdljkfjkdldjfkjfklsjfkldjfkldjfkdjflskdjfsklfjsklfjsjfkljfdkfjdkjdflskjf;lsdlfl;sfjdkfjkldjf;dljfdkfljdklfjklj;sdjf;kja;jfkdlj;slkdfjioe;wefkjkldfjds;kf;sjfkldfjsdklfjdklfjdl;fl;sdf;skfjkds;fjkd;lkfj55555555555555556666666666"] Client.shared?.send(event: event) ``` ![](https://i.imgur.com/rb0s46Y.png) ![](https://i.imgur.com/rPZiV8o.png) ### 檢視 event 的資訊 Event 送出後幾秒內你就會收到 email 和可以在 dashboard 檢視相關資料 按進出即可檢視相關資料: ![](https://i.imgur.com/GdgbPS1.png) Event 的頁面(進去後會顯示最新一筆資料): ![](https://i.imgur.com/YfaDIuS.png) 按 Events 即可檢視單筆 event 資料列表: ![](https://i.imgur.com/uQIcCnU.png) 每筆資料會顯示 User、Device、APP、OS 和 SDK 資料: ![](https://i.imgur.com/gabgVtB.png) ![](https://i.imgur.com/kyjAupE.png) ![](https://i.imgur.com/OhJxUYV.png) ![](https://i.imgur.com/0kuPlHT.png) ![](https://i.imgur.com/lVZjifR.png) ### Fatal error event Fatal error event 會自動紀錄 ![](https://i.imgur.com/zoEKFsZ.png) event 中會有提供 debug 的資訊: ![](https://i.imgur.com/YS1Rh63.png) ![](https://i.imgur.com/2d6xDuB.png) ![](https://i.imgur.com/yTDPDhz.png) ## 設定 User Firebase Analytics 可以用 `Analytics.setU![](https://i.imgur.com/efQtlGP.png) serID(id)` 來設定 user Sentry 也有類似功能,若無設定 User 資訊只會顯示用戶 IP address 用法是在 configure 以後設定 Client 中的 user: ``` let user = User(userId: id) user.username = "natalie" Client.shared?.user = user ``` ![](https://i.imgur.com/59B2JCV.png) ![](https://i.imgur.com/MMlVDai.png) ## 設定其他資訊 可按自己的需求設定其他資訊 用法也是更改 Client 的設定: ``` Client.shared?.tags = ["iphone": "true"] Client.shared?.extra = [ "my_key": 1, "some_other_value": "foo bar" ] Client.shared?.releaseName = "release" Client.shared?.dist = "dist" Client.shared?.environment = "production" ``` 設定了之後,在 `Issues > EVENT` 可以看到設定的資訊: ![](https://i.imgur.com/CfwcspH.png) Client 中所設定的 extra 資訊會在每一筆 event 中帶入: ![](https://i.imgur.com/jKKbB6s.png) ![](https://i.imgur.com/m1DYdbh.png) #### dist ![](https://i.imgur.com/pbs21uJ.png) ## Breadcrumbs Sentry 提供可以追蹤用戶的動作的功能,一般會追蹤 viewDidAppear 和按鈕事件, 開啓功能後可在 event page 看到該 event user 所做的事件, 預設最多是50宗事件,也可以自行設定: `Client.shared?.breadcrumbs.maxBreadcrumbs = 100` ![](https://i.imgur.com/2CHiYBo.png) 也可自定義 breadcrumbs: `Client.shared?.breadcrumbs.add(Breadcrumb(level: .info, category: "test"))` 這功能預設是沒有開啓,若要開啓也是更改 Client 的設定: ``` Client.shared?.enableAutomaticBreadcrumbTracking() ```