文档章节

记录Debug信息到文件中

沐风歌
 沐风歌
发布于 2017/02/17 11:30
字数 379
阅读 4
收藏 0

 

简述

在移动设备中,有时候需要记录一下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]);
        }
    }
}

© 著作权归作者所有

沐风歌

沐风歌

粉丝 0
博文 5
码字总数 1914
作品 0
成都
私信 提问
log4j的使用

log4j是一个非常强大的log记录软件,下面我们就来看看在项目中如何使log4j。 首先当然是得到log4j的jar档,推荐使用1.2.X版,下载地址: http://logging.apache.org/log4j/1.2/download.htm...

长平狐
2013/01/06
125
0
Log4j的ConversionPattern参数的格式含义

Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG #这里定义能显示到的最低级别,若定义到INFO级别,则看不到DEBUG级别的信息了~! log4j.rootLogger=DEBUG #将DAO层log...

虾米团长
2011/06/04
213
0
【MyBatis框架】MyBatis入门程序第一部分

我们通过写一个简单的MyBatis小项目来在实战中学习MyBatis 1.需求 根据用户id(主键)查询用户信息 根据用户名称模糊查询用户信息 添加用户 删除 用户 更新用户 mybatis运行环境(jar包): ...

Mysoft
2015/09/11
37
0
Logger日志级别说明及设置方法、说明

日志记录器(Logger)是日志处理的核心组件。log4j具有5种正常级别(Level)。日志记录器(Logger)的可用级别Level (不包括自定义级别 Level), 以下内容就是摘自log4j API (http://jakarta.apach...

谢思华
2014/01/20
950
0
java log4j使用

log4j使用方法 1、定义配置文件 首先使用配置文件将使我们的应用程序更加灵活配置log日志输出方式包括输出优先级、输出目的地、输出格式。Log4j支持两种配置文件格式,一种是 XML格式的文件,...

asdtiang
2010/02/22
3.4K
1

没有更多内容

加载失败,请刷新页面

加载更多

安全组和云防火墙的区别

前言 熟悉云平台的朋友可能都会注意到这样一个事情:无论公有云还是私有云,创建虚拟机的时候都需要选择安全组,来对虚拟机进行安全防护;有的云平台在VPC里,还能选择防火墙,ZStack在3.6版...

ZStack社区版
32分钟前
3
0
教育性app开发的重要性和好处

在这个精通技术的世界中,流行的app主导着无聊的教育系统。当我们将技术和教育结合在一起时,它将带来当代以及强大的学习资源。因此,将教育移动app集成到您的学习过程中,并根据自己的信念把...

a429011717
33分钟前
3
0
IE6/7/8如何兼容CSS3属性

本文转载于:专业的前端网站➩IE6/7/8如何兼容CSS3属性 最近在工作中总是要求IE8兼容CSS3属性,在网上搜了搜主要是引入了一个htc文件(ie-css3.htc或者PIE.htc。个人认为这两个文件的作用差不...

前端老手
48分钟前
4
0
手把手教你ALLEGRO的约束规则的设置教程!

约束规则的设置 分三步, 定义规则(一、基本约束规则设置:1、线间距设置;2、线宽设置;3、设置过孔;4、区域约束规则设置;5、设置阻抗;6、设置走线的长度范围;7、设置等长:7.1、不过电阻的NET 等...

demyar
50分钟前
5
0
完美解决H5滚动滑动穿透方案:不使用系统滚动

网上有很多黑科技解决这个问题,都不是从根本去解决,例如通过js控制弹出时html加上position:fixed; 弹窗关闭后再去掉该样式,总觉得不太对,像是打补丁。 今天终于找到了滚动穿透的原因和完...

未来cc
55分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部