概述:http://www.javashuo.com/article/p-nggymcxb-bw.htmlhtml
日誌系統功能包括:android
1.日誌開關。只有開發版本開啓日誌,由於日誌仍是比較耗性能的。。。ios
2.堆棧日誌界面:ERROR時彈出界面,該界面顯示錯誤的堆棧日誌。大半部分錯誤日誌是不會致使崩潰,若是不彈窗qa可能會漏掉一些重要的log信息。json
3.接入SRDebugger,方便在qa測試時,在測試機查看詳細的日誌信息,方便定位錯誤出現的緣由。api
4.FPS幀率的顯示xcode
5.遊戲正式上線之後,咱們很難拿到用戶的錯誤日誌,這時候咱們須要把錯誤的日誌上傳到咱們的服務器服務器
6.當遊戲崩潰時咱們是拿不到unity打印的日誌的,這時候就須要接入FireBase了,它能夠幫咱們把崩潰的詳細日誌上傳到網頁上,方便咱們查看app
日誌系統目標用戶:框架
1.qa、運營等測試人員(能夠拿到測試機),須要在手機上實現可視化的日誌堆棧,方便查閱日誌(固然你也能夠把手機連到Android Studio和Xcode查看日誌,就是比較麻煩而已),對定位bug有很大幫助。maven
2.用戶(獲取不到測試機),須要把日誌上傳到服務器,崩潰日誌須要接入FireBase,這樣就能夠在FB後臺看到崩潰的堆棧信息。
1、手機上顯示log信息:SRDebugger插件
SRDebugger文檔:https://www.stompyrobot.uk/tools/srdebugger/documentation/
SRDebugger下載:https://assetstore.unity.com/packages/tools/gui/srdebugger-console-tools-on-device-27688,嗯,這個24美刀~
SRDebugger界面示例:SRDebugger能夠獲取當前運行系統的信息,包括操做系統、處理器、顯卡等硬件信息。
SRDebugger能夠查看全部的程序運行日誌,包括使用Debug.Log系列打印的日誌,或是其餘的未捕獲異常。
SRDebugger能夠監控整個項目的內存使用信息,手動卸載資源,手動進行GC垃圾回收。
2、日誌開關及堆棧信息獲取
日誌開關無非就是框架封裝一層日誌接口,全部業務的日誌打印都走這個接口,在根據條件判斷是否調用Debug.Log方法。例如:
public void Log(string log) { if (Config.LogEnable) { Debug.Log(log); } }
日誌堆棧信息獲取:Application.logMessageReceived接口。每次接收到日誌消息,都會觸發的事件。注意在logMessageReceived回調裏打印任何日誌都不會生效(避免死循環)。
using UnityEngine; using System.Collections; public class ExampleClass : MonoBehaviour { public string output = ""; public string stack = ""; void OnEnable() { Application.logMessageReceived += HandleLog; } void OnDisable() { Application.logMessageReceived -= HandleLog; } void HandleLog(string logString, string stackTrace, LogType type) { output = logString; stack = stackTrace; } }
// // 摘要: // The type of the log message in Debug.logger.Log or delegate registered with Application.RegisterLogCallback. public enum LogType { // // 摘要: // LogType used for Errors. Error = 0, // // 摘要: // LogType used for Asserts. (These could also indicate an error inside Unity itself.) Assert = 1, // // 摘要: // LogType used for Warnings. Warning = 2, // // 摘要: // LogType used for regular log messages. Log = 3, // // 摘要: // LogType used for Exceptions. Exception = 4 }
logString:日誌信息。stackTrace:日誌的詳細堆棧信息。
那麼錯誤彈窗就是將錯誤信息以及錯誤的堆棧信息賦值給Text並顯示在界面上。
例如
public void DevelopLog(string logString, string stackTrace, LogType type) { if (type == LogType.Error || type == LogType.Exception) { string result = "LogString:" + logString; result += "\nStackTrace:" + stackTrace; m_content.text = log; } }
保存服務端的話就是將上面的result值傳給服務端,由服務端保存。固然你也能夠額外添加一些參數,例如版本、時間、機型等。例如
string result = string.Format("Version:{0}\nTime:{0}\nLogString:{1}\nStackTrace:{2}", Config.Version, Time.time, logString, stackTrace);
3、崩潰信息上傳FireBase
Android API文檔:https://firebase.google.com/docs/android/setup?hl=zh-cn
Ios API文檔:https://firebase.google.com/docs/ios/setup?hl=zh-cn
這個兩個文檔有詳細的FireBase後臺配置的步驟,以及GoogleService-Info.plist 、google-services.json文件的生成(這兩個文件須要放在你的工程目錄裏)
若是你的sdk或者運營大哥幫你配置好了並給了你GoogleService-Info.plist 、google-services.json文件的話,只須要參考如下步驟就行了。
android:只須要兩步,記得把你的google-services.json文件拷貝到項目裏
參考:https://firebase.google.com/docs/crashlytics/get-started?platform=android#android
1.在項目級 build.gradle
中,將您的 google-services
更新爲 3.1.2 或更高版本,而後添加 Crashlytics 代碼庫和依賴項:
buildscript { repositories { // Add the following repositories: google() // Google's Maven repository maven { url 'https://maven.fabric.io/public' } } dependencies { // ... // Check for v3.1.2 or higher classpath 'com.google.gms:google-services:4.2.0' // Google Services plugin // Add dependency classpath 'io.fabric.tools:gradle:1.29.0' // Crashlytics plugin } } allprojects { // ... repositories { // Check that you have the following line (if not, add it): google() // Google's Maven repository // ... } }
2.在應用級 build.gradle
中,將 firebase-core
更新爲 v11.4.2 或更高版本,而後添加 Crashlytics 依賴項:
apply plugin: 'com.android.application' apply plugin: 'io.fabric' dependencies { // ... // Check for v11.4.2 or higher implementation 'com.google.firebase:firebase-core:17.0.0' // Add dependency implementation 'com.crashlytics.sdk.android:crashlytics:2.10.1' }
ios參考:https://firebase.google.com/docs/crashlytics/get-started?platform=ios#android
1.拉取代碼,打開 Podfile,而後添加如下行:
pod 'Fabric', '~> 1.10.2' pod 'Crashlytics', '~> 3.13.3'
2.初始化
若是你的ios端提示dsym未上傳,能夠用命令行上傳(比較耗時間,建議只在正式包上傳),命令以下:
/path/to/pods/directory/Fabric/upload-symbols -gsp /path/to/GoogleService-Info.plist -p ios /path/to/dSYMs
//這邊的self.OutProjectPath是你的xcode項目目錄
cmddSYM = "%sPods/Fabric/upload-symbols -gsp %sGoogleService-Info.plist -p ios %sarchive/SF.xcarchive/dSYMs" % (self.OutProjectPath, self.OutProjectPath, self.OutProjectPath)
DSYM丟失參考api:https://firebase.google.com/docs/crashlytics/get-deobfuscated-reports?authuser=0