关于DebugLog调试信息的性能损耗

0x00

项目中针对日志的处理是很常见的问题,需要在开发阶段、真机包、发布包之间做到比较好的平衡。

  • 开发阶段:全量日志,任何开发者自己关心的日志消息
  • 真机包:减少这部分日志,只保留重要的报错信息
  • 发布包:提供crash查错相关的报错信息

0x01

Unity Cs侧使用Log的技巧

1
2
3
4
5
[Conditional("ENABLE_LOG")]
public static void LogFunction(object message)
{
...
}
1
2
3
4
5
6
7
//UnityEngine.Debug.unityLogger.logEnabled = false;
UnityEngine.Debug.unityLogger.filterLogType = LogType.Warning;

GameDebug.Log("[Homeland] test gameDebug" + testString("Aaa"));
Debug.Log("[Homeland] test Debug" + testString("Aaa"));
Debug.LogWarning("[Homeland] test Debug warning" + testString("Aaa"));

对于void并无out修饰的参数的方法,可以使用Conditional属性进行条件编译,如果未定义相应宏,引用此方法的代码均不会被执行(解决了参数构造时,字符串拼接以及装箱等操作的损耗)。

  • [x] Debug类中ILogger中logEnabledfilterLogType是否能够实现相同的控制?

答案是不能。

日志不会输出,单仍然会对参数执行构造,字符串拼接等等。只是节省了后续的函数调用(_OnLogCallbackHandler

0x02

Conditional属性是否可以对lua框架生效?类似的问题如何处理?

工具对代码行进行注释,需要保证所有log信息写成单行。