unity遊戲框架學習-日誌系統

概述: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

相關文章
相關標籤/搜索