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