背景信息

Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

日志服务支持 Web Tracking,您可以通过 Web Tracking 功能非常方便的收集 Unity 3D 的日志,下面以收集 Unity Debug.Log 为例,讲解如何将 Unity 日志收集到日志服务中。

操作步骤

  1. 开通 Web Tracking 功能。
    开通方法请参考:Web Tracking
  2. 注册 Unity3D LogHandler。
    在Unity editor中创建C#文件 LogOutputHandler.cs,输入以下代码,并修改其中的三个成员变量,分别为:
    • project,表示日志项目名称。
    • logstore,表示日志库名称。
    • serviceAddr,表示日志项目的地址。

      serviceAddr请参考服务入口

    using UnityEngine;
    using System.Collections;
    public class LogOutputHandler : MonoBehaviour
    {
        //Register the HandleLog function on scene start to fire on debug.log events
        public void OnEnable()
        {
            Application.logMessageReceived += HandleLog;
        }
        //Remove callback when object goes out of scope
        public void OnDisable()
        {
            Application.logMessageReceived -= HandleLog;
        }
        string project = "your project name";
        string logstore = "your logstore name";
        string serviceAddr = "http address of your log service project";
        //Capture debug.log output, send logs to Loggly
        public void HandleLog(string logString, string stackTrace, LogType type)
        {
            string parameters = "";
            parameters += "Level=" + WWW.EscapeURL(type.ToString());
            parameters += "&";
            parameters += "Message=" + WWW.EscapeURL(logString);
            parameters += "&";
            parameters += "Stack_Trace=" + WWW.EscapeURL(stackTrace);
            parameters += "&";
            //Add any User, Game, or Device MetaData that would be useful to finding issues later
            parameters += "Device_Model=" + WWW.EscapeURL(SystemInfo.deviceModel);
            string url = "http://" + project + "." + serviceAddr + "/logstores/" + logstore + "/track?APIVersion=0.6.0&" + parameters;
            StartCoroutine(SendData(url));
        }
        public IEnumerator SendData(string url)
        {
            WWW sendLog = new WWW(url);
            yield return sendLog;
        }
    }

    上面的代码可以异步的将日志发送到阿里云日志服务中,在示例中您可以添加更多想要收集的字段。

  3. 产生Unity日志。
    在工程中创建 LogglyTest.cs 文件,并加入下面的代码:
    using UnityEngine;
    using System.Collections;
    public class LogglyTest : MonoBehaviour {
        void Start () {
            Debug.Log ("Hello world");
        }
    }
  4. 在控制台预览日志。

    上述步骤做完之后,运行 Unity 程序,就可以在日志服务的控制台看到您发送的日志了。

    以上示例提供了 Debug.Log 或者Debug.LogErrorDebug.LogException 等类似日志的收集方法。Unity的组件对象模型及其提供的程序崩溃API、其他各种LOG API使您可以非常方便的收集客户端的设备信息。