游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5938|回复: 0

关于Debug.Log的一点小知识

[复制链接]

8722

主题

8783

帖子

1万

积分

版主

Rank: 7Rank: 7Rank: 7

积分
11952
发表于 2018-11-28 11:58:40 | 显示全部楼层 |阅读模式
文/Mitty

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

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

也可以按照日志的严重程度来排列,对应的API:

1.jpg

在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:

2.jpg

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

3.png

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

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

4.jpg

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

使用方法:

5.png

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

6.png

大致了解了日志的级别,如何过滤不同级别的日志,如何ON/OFF日志,将日志保存到文件中等等这些基本的操作以后,封装一套自己的日志系统就只就剩下体力劳动了,在Unity上有很多插件会对Unity Console也进行了自定义的输出,如果对编辑器开发感兴趣的,可以拿下来研究研究。

感谢您的阅读,如文中有误,欢迎指正,共同提高。

来源:腾讯游戏学院
原地址:https://mp.weixin.qq.com/s/pyyOpvQmxW5zcpi2nWkJKg

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2024-4-27 05:52

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表