<aside> 💡 Beautiful, elegant, most importantly readable! Let’s make logs looking great again!

</aside>


为了让 Lua 日志看起来更简洁更直观,于是对日志做了一点点🤏小小的修改。

定义接口

第一步,先把需要用的接口写好,很简单,分别对应的是 info, warning, error 等级的日志:

local traceback = debug.traceback

function log.info(...)
	---为了避免性能,可以添加一些开关
  if not UNITY_EDITOR and not _log_info_enabled then return end
  CSGame.Log(get_output(...), traceback())
end

function log.warning(...)
  CSGame.LogWarning(get_output(...), traceback())
end

function log.error(...)
  CSGame.LogError(get_output(...), traceback())
end

备注:CSGame.Log,CSGame.LogWarning, CSGame.LogError 是封装的 Lua 调用的 CS 接口,其中 CSGame 即 CS.Export2Lua.CSGame 类,为 xLua 导出接口的类,项目中对所有接口进行了分类,统一位于 Export2Lua 命名空间下。

备注2:接口里添加的 traceback() 是额外附加了了当前的调用堆栈信息,有助于 debug 时提供更多信息。

支持多参数

上文中预留的一个函数 get_output(...) 要怎么实现呢?

C# 在在打印日志时,比较麻烦的就是一条日志需要打印多个变量的值时,要是用格式化字符串,虽然使用的是 $"this is a {param}" 这样的字符串,但仍然略显麻烦。所以 lua 函数的不定参数数量的优势,可以直接无脑的传入一个或者一堆变量,然后一次性打印出来。

构造打印格式

美观优雅的日志,主要取决于 table 是否能够美观优雅的打印出来。这里示例的打印格式为 {k1: v1, k2:v2},也可以自行添加换行、缩进,甚至对 table 进行排序后再打印等各种更浪费性能有助于方便查看的格式。

接口的扩展

出了三个等级的日志打印接口,还有一些常用的其他接口,可以进行扩展: