记录Debug信息到文件中

 

简述

在移动设备中,有时候需要记录一下debug信息。这时候,该脚本能满足要求。

特性

  • 记录游戏中的debug信息
  • 记录apk中的错误信息
  • 错误信息会打印到屏幕
  • 保存到文件

用法

将代码复制到Unity中,挂载到随意一个GameObject中即可。

详细代码

下列代码借鉴了网络中的写法

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Text;

public class ErrorDisplay : MonoBehaviour
{
    static List<string> mLines = new List<string>();
    static List<string> mWriteTxt = new List<string>();
    private string outpath;
    void Start()
    {
        //Application.persistentDataPath Unity中只有这个路径是既可以读也可以写的。
        outpath = Application.persistentDataPath + "/outLog.txt";
        //每次启动客户端删除之前保存的Log 
        if (File.Exists(outpath))
        {
            File.Delete(outpath);
        }
        //在这里做一个Log的监听 
        Application.logMessageReceived += HandleLog;

        Debug.Log("Log Starting...");
        Debug.Log("Game Version : " + Application.version + ", Unity Version : " + Application.unityVersion);
    }

    void Update()
    {
        //因为写入文件的操作必须在主线程中完成,所以在Update中写入文件。 
        if (mWriteTxt.Count > 0)
        {
            string[] temp = mWriteTxt.ToArray();
            foreach (string t in temp)
            {
                using (StreamWriter writer = new StreamWriter(outpath, true, Encoding.UTF8))
                {
                    writer.WriteLine(t);
                }
                mWriteTxt.Remove(t);
            }
        }
    }

    void HandleLog(string logString, string stackTrace, LogType type)
    {
        mWriteTxt.Add(logString);
        if (type == LogType.Error || type == LogType.Exception)
        {
            mWriteTxt.Add(stackTrace);  // 如果是错误信息,则需要打印完整日志 
            Log("logString : " + logString);
            Log("stackTrace : " + stackTrace);
        }
    }

    //这里我把错误的信息保存起来,用来输出在手机屏幕上 
    static public void Log(params object[] objs)
    {
        string text = "";
        for (int i = 0; i < objs.Length; ++i)
        {
            if (i == 0)
            {
                text += objs[i].ToString();
            }
            else
            {
                text += ", " + objs[i].ToString();
            }
        }
        if (Application.isPlaying)
        {
            if (mLines.Count > 20)
            {
                mLines.RemoveAt(0);
            }
            mLines.Add(text);
        }
    }

    void OnGUI()
    {
        GUI.skin.label.fontSize = 14;
        GUI.color = Color.red;
        for (int i = 0, imax = mLines.Count; i < imax; ++i)
        {
            GUILayout.Label(mLines[i]);
        }
    }
}

转载于:https://my.oschina.net/k74CguqsIJE/blog/840672

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值