当前位置:  首页  >  PHP资讯  >  业界资讯

聊聊Unity自定义日志保存的问题

这篇文章主要介绍了Unity自定义日志保存的问题,之前unity5.x在代码中写了debug.log打包之后在当前程序文件夹下会有个对应的"outlog.txt",后来进行了更改,今天通过代码给大家介绍了Unity日志保存的问题,需要的朋友一起看看吧

前言    

   之前unity5.x在代码中写了debug.log..等等,打包之后在当前程序文件夹下会有个对应的"outlog.txt",2017之后这个文件被移到C盘用户Appdata/LocalLow/公司名 文件夹下面。觉得不方便就自己写了个

代码

 using UnityEngine; using System.IO; using System; using System.Diagnostics; using Debug = UnityEngine.Debug; public class DebugTrace { private FileStream fileStream; private StreamWriter streamWriter; private bool isEditorCreate = false;//是否在编辑器中也产生日志文件 private int showFrames = 1000; //打印所有 #region instance private static readonly object obj = new object(); private static DebugTrace m_instance; public static DebugTrace Instance { get { if (m_instance == null) { lock (obj) { if (m_instance == null) m_instance = new DebugTrace(); } } return m_instance; } } #endregion private DebugTrace() { } ///  /// 开启跟踪日志信息 ///  public void StartTrace() { if (Debug.unityLogger.logEnabled) { if (Application.isEditor) { //在编辑器中设置isEditorCreate==true时候产生日志 if (isEditorCreate) { CreateOutlog(); } } //不在编辑器中 是否产生日志由 Debug.unityLogger.logEnabled 控制 else { CreateOutlog(); } } } private void Application_logMessageReceivedThreaded(string logString, string stackTrace, LogType type) { // Debug.Log(stackTrace); //打包后staackTrace为空 所以要自己实现 if (type != LogType.Warning) { // StackTrace stack = new StackTrace(1,true); //跳过第二?(1)帧 StackTrace stack = new StackTrace(true); //捕获所有帧 string stackStr = string.Empty; int frameCount = stack.FrameCount; //帧数 if (this.showFrames > frameCount) this.showFrames = frameCount; //如果帧数大于总帧速 设置一下 //自定义输出帧数,可以自行试试查看效果 for (int i = stack.FrameCount - this.showFrames; i  /// 关闭跟踪日志信息 ///  public void CloseTrace() { Application.logMessageReceivedThreaded -= Application_logMessageReceivedThreaded; streamWriter.Dispose(); streamWriter.Close(); fileStream.Dispose(); fileStream.Close(); } ///  /// 设置选项 ///  /// 是否记录日志 /// 是否显示所有堆栈帧 默认只显示当前帧 如果设为0 则显示所有帧 /// 过滤 默认log级别以上 /// 是否在编辑器中产生日志记录 默认不需要 public void SetLogOptions(bool logEnable, int showFrams = 1, LogType filterLogType = LogType.Log, bool editorCreate = false) { Debug.unityLogger.logEnabled = logEnable; Debug.unityLogger.filterLogType = filterLogType; isEditorCreate = editorCreate; this.showFrames = showFrams == 0 ? 1000 : showFrams; } }

关于 filterLogType

filterLogType默认设置是Log,会显示所有类型的Log。

Warning:会显示Warning,Assert,Error,Exception

Assert:会显示Assert,Error,Exception

Error:显示Error和Exception

Exception:只会显示Exception

使用

 using UnityEngine; public class Test : MonoBehaviour { private BoxCollider boxCollider; void Start() { DebugTrace.Instance.SetLogOptions(true, 2, editorCreate: true); //设置日志打开 显示2帧 并且编辑器下产生日志 DebugTrace.Instance.StartTrace(); Debug.Log("log"); Debug.Log("log", this); Debug.LogError("LogError"); Debug.LogAssertion("LogAssertion"); boxCollider.enabled = false; //报错 发布后捕捉不到帧 } private void OnApplicationQuit() { DebugTrace.Instance.CloseTrace(); } }

如果在编辑器中也设置产生日志,日志文件在当前项目路径下,打包后在exe同级目录下

在打包发布后某些数据会获取不到 例如行号

StackFrame参考

最后看下效果:

不足

发布版本 出现异常捕捉不到 行号获取不到

debug版本可以勾选DevelopMend build 捕捉到更多信息

到此这篇关于聊聊Unity 自定义日志保存的问题的文章就介绍到这了,更多相关Unity日志保存内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

内容推荐:免费高清PNG素材下载
吐了个 "CAO" !
扫码关注 PHP1 官方微信号
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved PHP1.CN 第一PHP社区 版权所有 京ICP备19059560号-4