PGRData/Script/matrix/xcommon/XLog.lua

188 lines
4.8 KiB
Lua
Raw Normal View History

XLog = XLog or {}
local MAX_DEPTH = 15
local Type = type
local Tostring = tostring
local TableRemove = table.remove
local TableInsert = table.insert
local TableConcat = table.concat
local StringGub = string.gsub
local DebugTraceback = debug.traceback
local XLogDebug = CS.XLog.Debug
local XLogWarning = CS.XLog.Warning
local XLogError = CS.XLog.Error
local Pairs = function(arr)
local meta_t = getmetatable(arr)
if meta_t and meta_t.__pairs then
return meta_t.__pairs(arr)
end
return pairs(arr)
end
local indentCache = { "" }
local function GetIndent(depth)
if not indentCache[depth] then
indentCache[depth] = GetIndent(depth - 1) .. " "
end
return indentCache[depth]
end
local function Dump(target)
local content = {}
local stack = {
{
obj = target,
name = nil,
depth = 1,
symbol = nil,
}
}
while #stack > 0 do
local top = TableRemove(stack)
local obj = top.obj
local name = top.name
local depth = top.depth
local symbol = top.symbol
if Type(obj) == "table" then
if depth > MAX_DEPTH then
TableInsert(stack, {
obj = "too depth ...",
name = name,
depth = depth,
symbol = symbol,
})
else
TableInsert(stack, {
obj = "}",
name = nil,
depth = depth,
symbol = symbol,
})
local temp = {}
for k, v in Pairs(obj) do
TableInsert(temp, {
obj = v,
name = k,
depth = depth + 1,
symbol = ",",
})
end
local count = #temp
for i = 1, count do
TableInsert(stack, temp[count - i + 1])
end
TableInsert(stack, {
obj = "{",
name = name,
depth = depth,
symbol = nil,
})
end
else
TableInsert(content, GetIndent(depth))
if name then
if Type(name) == "string" then
TableInsert(content, "[\"")
TableInsert(content, name)
TableInsert(content, "\"]")
else
TableInsert(content, "[")
TableInsert(content, Tostring(name))
TableInsert(content, "]")
end
TableInsert(content, " = ")
end
if obj and Type(obj) == "string" then
if obj ~= "{" and obj ~= "}" then
TableInsert(content, "\"")
TableInsert(content, obj)
TableInsert(content, "\"")
else
TableInsert(content, obj)
end
else
TableInsert(content, Tostring(obj))
end
if symbol then
TableInsert(content, symbol)
end
TableInsert(content, "\n")
end
end
return TableConcat(content)
end
local Print = function(...)
local args = { ... }
local count = #args
if count <= 0 then
return
end
local content = {}
for i = 1, count do
if Type(args[i]) == "table" then
TableInsert(content, Dump(args[i]))
else
TableInsert(content, Tostring(args[i]))
TableInsert(content, "\n")
end
end
return TableConcat(content)
-- return StringGub(StringGub(TableConcat(content), "{", "/{"), "}", "/}")
end
XLog.Debug = function(...)
local content = Print(...)
if content then
XLogDebug(content .. "\n" .. DebugTraceback())
else
XLogDebug("nil\n" .. DebugTraceback())
end
end
XLog.Warning = function(...)
local content = Print(...)
if content then
XLogWarning(content .. "\n" .. DebugTraceback())
else
XLogWarning("nil\n" .. DebugTraceback())
end
end
XLog.Error = function(...)
local content = Print(...)
if content then
XLogError(content .. "\n" .. DebugTraceback())
else
XLogError("nil\n" .. DebugTraceback())
end
end
-- 表格找不到数据错误统一输出接口
XLog.ErrorTableDataNotFound = function(functionName, dataName, tablePath, paramName, paramValue)
XLog.Error(string.format("%s出错:找不到%s数据。搜索路径: %s 索引%s = %s", functionName, dataName, tablePath, paramName, paramValue))
end
XLog.Dump = function(value)
if type(value) ~= "table" then
return tostring(value)
end
return Dump(value)
end