forked from endernon/PGRData
188 lines
No EOL
4.8 KiB
Lua
188 lines
No EOL
4.8 KiB
Lua
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 |