今天同事在接腾讯Bugly异常上报SDK时,涉及到了一些关于Debug.Log的问题,所以就又回顾了一下官方的文档

在Unity当中,我们输出Log都会使用Debug.Log,Log的类型分为以下几种:

  • Log--常规日志
  • Warning--警告日志
  • Assert--断言
  • Error--错误
  • Exception--异常

也可以按照日志的严重程度来排列

对应的API:

 Debug.Log("regular log");

Debug.LogWarning("this is a warning!!! but we never care about it");

Debug.LogAssertion("this is an Assert,hmmm....it must be something wrong!");

Debug.LogError("this is an Error,You have to fix it!");

Debug.LogException(new System.Exception("How about we delete these codes?"));

在Debug类中有个只读属性:

public static ILogger logger { get; }

Debug只是一个logger属性的Wrapper包装,所有Debug相关均是由logger接口实现

查阅一下Debug的源码发现,所有类型的输出只提供了object参数版本,Debug总是要输出值类型的,这样就一定会出现boxing装箱的操作,如果我们在Update中去做这样的Log,那么每一帧都会在堆上分配内存,会产生内存碎片,容易引起GC,所以一定要在Release版本中关闭掉Log日志的输出

如何关闭Debug.Log?

在ILogger接口下,有个logEnabled属性,设置为false,就可以屏蔽Log的输出,但这种一刀切的手段肯定是不适应的,比如说我还想保留Warning,Error,Exception输出,像Bugly就可以捕获Debug.LogError级别的输出,所以需要使用其它的方式来解决。

(不过我个人还是建议,调试的代码应该测试完就屏蔽掉)

在ILogger接口下,有另外一个枚举属性filterLogType

  • filterLogType默认设置是Log,会显示所有类型的Log
  • Warning:会显示Warning,Assert,Error,Exception
  • Assert:会显示Assert,Error,Exception
  • Error:显示Error和Exception
  • Exception:只会显示Exception

所以只需要改变filterLogType就可以了,比如改为Assert,这样Assert,Error,Exception都可以输出并被相应的第三方异常上报SDK捕获到。

官主提供了一段代码:

https://docs.unity3d.com/ScriptReference/Logger-filterLogType.html

通过Debug下isDebugBuild属性来判断当前的版本是Debug版还是Release

当处于DB版本的时候,我使用LogType.Log,输出所有的Log,正式版本的时候,只输出Warning以上级别的,如果我们只需要Assert以上的,就设置为Assert即可。

如果想要更灵活的使用,可以和宏配合使用,或是可以通过命令行的方式行来打包,避免每次都去修改BuildingSettings

In the Build Settings dialog there is a check box called "Development Build".

isDebugBuild的设置是在BuildSetting下的Development Build,我们在真机上进行Profiler性能调试的时候,都要使用Development Build版本

而且logger还有一个好处是可以自定义TAG,这样可以更方便的Filter到我们想看的日志,默认Debug.Log都有默认的TAG Unity

对于日志系统,在AssetStore上可以找到非常多,都有着很丰富的定义,但满足自己当下的需求就好了,而且为了方便日志系统更利于自己的使用,通常都会封装一套自己的日志系统,比如:

1.我要区分我的日志和Debug.Log日志,或是和Android,iOS系统日志

2.我需要在输出日志的时候,带上时间和由哪个类输出等参数

3.真机调试时,我需要将真机上的日志保存在一个文件中,这样不用担心日志被顶掉,也不用过滤,直接查看导出的日志文件即可,甚至 可以做得再全面一些,可以将日志在后台上传到服务器

https://docs.unity3d.com/ScriptReference/ILogHandler.html

这是官方提供的一个自定义ILogHandler的代码,目的就是将我们的Log输出到控制台的同时,输出到日志文件中

实现ILogHandler接口,LogFormat和LogException,这里也可以根据 LogType进行自定义

使用方法:

最后日志输出到了Mylogs.txt下:

大致了解了日志的级别,如何过滤不同级别的日志,如何ON/OFF日志,将日志保存到文件中等等这些基本的操作以后,封装一套自己的日志系统就只就剩下体力劳动了,在Unity上有很多插件会对

Unity Console也进行了自定义的输出,如果对编辑器开发感兴趣的,可以拿下来研究研究

Application.logMessageReceivedThreaded += callback; 也可以捕获log输出

关于Debug.Log的一点儿小知识相关推荐

  1. Unity ECS小知识1 - PhysicsTrigger Event

    Unity ECS 小知识1 - PhysicsTrigger Event ECS套件学习过程中会遇到各种问题,专门开辟一个专题"ECS小知识"来记录这些点滴.每个小知识文章是没有 ...

  2. Android小知识-Fragment

    转载请标明出处:[顾林海的博客] 个人开发的微信小程序,目前功能是书籍推荐,后续会完善一些新功能,希望大家多多支持! ##前言 今天还是总结下Android中的小知识点Fragment,Fragmen ...

  3. jquery/css需要记录的小知识(持续补充)

    一.前言 2020年的第一篇了,奥利给! 这部分主要是汇总一些平时遇到的jquery和css小知识,作为笔记使用. 二.正文 1.jquery模拟select下拉框的选择事件,并传参数: self.s ...

  4. flask中的CBV , flask-session在redis中存储session , WTForms数据验证 , 偏函数 , 对象里的一些小知识...

    flask中的CBV , flask-session在redis中存储session , WTForms数据验证 , 偏函数 , 对象里的一些小知识 flask中的CBV写法 后端代码 # 导入vie ...

  5. [攻防世界 pwn]——pwn1(内涵peak小知识)

    [攻防世界 pwn]--pwn1 题目地址:https://adworld.xctf.org.cn/ 题目: peak小知识 这道题目的关键就是泄露canary,通常我们泄露canary有两种方法,遇 ...

  6. [攻防世界 pwn]——string(内涵peak小知识)

    [攻防世界 pwn]--string 题目地址:https://adworld.xctf.org.cn/ 题目: peak小知识 mmap函数作用,mmap主要是将文件映射到一段内存去同时设置那段内存 ...

  7. JavaScript面试小知识

    JavaScript小知识: 数据类型: 原始(基本.简单)数据类型:5种:number string Boolean undefined 空(null,特殊含义,一般不直接写出来) 引用(复杂)数据 ...

  8. qt widget加载qml_Qml组件小知识

    介绍组件构造,销毁,动态加载小知识. 对象/组件都具有类似C++的构造函数和析构函数 onCompleted对象构造完成自动执行: onDestruction对象销毁前自动执行. QtObject { ...

  9. Android小知识10则(上)(2018.8重编版)

    Android小知识10则(下) 目录 前言 横竖屏锁定 不同分辨率的图标 将字符串写在资源文件中 为AlertDialog设置点击监听 ProgressDialog了解一下 最后 前言 Androi ...

最新文章

  1. Javascript学习笔记2——函数
  2. [SimplePlayer] 实现一个简单的播放器
  3. 如何入门技术、进阶技术(技术开发人员)
  4. servlet上传下载(任何格式的都可以)
  5. dhtmlxgantt|dhtmlx甘特图|最新版Crack
  6. java学生成绩管理设计报告_Java 学生成绩管理系统(含论文,开题报告)源码
  7. 10. python-es-8.3.3-IP范围聚合ip_range
  8. php程序员中文,php中文网“php程序员工具箱” v0.1版本上线
  9. win10计算机桌面快捷方式,win10发送到桌面快捷方式不见了如何解决_win10电脑没有发送到桌面快捷方式选项怎么恢复...
  10. linux磁盘坏道测试,Linux磁盘坏道检测
  11. 方舟服务器id哪里显示,方舟怎么看自己的ID | 手游网游页游攻略大全
  12. 求web嘎嘎厉害的朋友
  13. 门这边、门那边的2个世界...
  14. 官宣!博通将以 4100 亿收购 VMware!
  15. vulnhub-Momentum2
  16. 操作体验极度舒适的多功能软件卸载工具 - iObit Uninstaller PRO
  17. (2)组合数学-拉丁方
  18. ECU诊断软件设计(1)
  19. 06 nginx 处理转发其他域的处理 以及 proxy_redirect
  20. 深度学习入门--斋藤康毅 总结

热门文章

  1. list集合用stream流distinct去重失效问题
  2. 2021最新全球CS专业排名发布,CMU再夺榜首,清华和MIT并列第三!
  3. 情商决定了工作方面的成就
  4. 有没有好用的证件照生成器?教你一键生成证件照
  5. python取前三位_python的字符串截取||取字符串前三位
  6. Linux系统配置及服务管理_第07章_存储管理2
  7. JavaSwing真的过时了吗?请不要忽略了它的启蒙作用
  8. Java之美[从菜鸟到高手演变]之集合类【吐血推荐!讲得太好了!!!】
  9. NopCommerce 在Category 显示Vendor List列表
  10. 【ELMAN预测】基于粒子群算法改进ELMAN动态递归神经网络实现数据预测matlab源码