当前位置:网站首页>Lua log implementation -- print table
Lua log implementation -- print table
2022-07-29 01:52:00 【wufeng_ asia】
Print the results

usage
print_r(table,"post method:Login")
Code
local rpc_log_off = 0 -- 1 close log,0 open log
local function write_file(fd,str)
if fd then
fd:write(str .. '\n')
end
end
local function dump_value_(v)
if type(v) == "string" then
v = "\"" .. v .. "\""
end
return tostring(v)
end
local function split(input, delimiter)
input = tostring(input)
delimiter = tostring(delimiter)
if (delimiter == "") then return false end
local pos, arr = 0, {
}
for st, sp in function() return string.find(input, delimiter, pos, true) end do
table.insert(arr, string.sub(input, pos, st - 1))
pos = sp + 1
end
table.insert(arr, string.sub(input, pos))
return arr
end
local function trim(input)
return (string.gsub(input, "^%s*(.-)%s*$", "%1"))
end
local function dump(dbg,value, desciption, nesting)
if type(nesting) ~= "number" then nesting = 3 end
local lookupTable = {
}
local result = {
}
local traceback = split(debug.traceback("", 2), "\n")
-- print("dump from: " .. trim(traceback[3]))
local function dump_(value, desciption, indent, nest, keylen)
desciption = desciption or "<var>"
local spc = ""
if type(keylen) == "number" then
spc = string.rep(" ", keylen - string.len(dump_value_(desciption)))
end
if type(value) ~= "table" then
result[#result +1 ] = string.format("%s%s%s = %s", indent, dump_value_(desciption), spc, dump_value_(value))
elseif lookupTable[tostring(value)] then
result[#result +1 ] = string.format("%s%s%s = *REF*", indent, dump_value_(desciption), spc)
else
lookupTable[tostring(value)] = true
if nest > nesting then
result[#result +1 ] = string.format("%s%s = *MAX NESTING*", indent, dump_value_(desciption))
else
result[#result +1 ] = string.format("%s%s = {", indent, dump_value_(desciption))
local indent2 = indent.." "
local keys = {
}
local keylen = 0
local values = {
}
for k, v in pairs(value) do
keys[#keys + 1] = k
local vk = dump_value_(k)
local vkl = string.len(vk)
if vkl > keylen then keylen = vkl end
values[k] = v
end
table.sort(keys, function(a, b)
if type(a) == "number" and type(b) == "number" then
return a < b
else
return tostring(a) < tostring(b)
end
end)
for i, k in ipairs(keys) do
dump_(values[k], k, indent2, nest + 1, keylen)
end
result[#result +1] = string.format("%s}", indent)
end
end
end
dump_(value, desciption, "- ", 1)
local len = dbg:seek("end")
if len > (2*1024*1024) then
os.execute("echo '' > /tmp/rpc.log")
end
for i, line in ipairs(result) do
write_file(dbg,line)
end
end
local function print_string(dbg,str)
write_file(dbg,str)
end
--[[ Print table The tool function of @params data What needs to be printed @params key describe @params depth Nested levels of printed content , Default 3 level ]]
function print_r(data, key, depth)
if not key then
key = ""
end
if not depth then
depth = 3
end
local dbg = io.open("/tmp/rpc.log", "w+")
if rpc_log_off == 0 then
if (type(data) == "table") then
dump(dbg,data,key,depth)
elseif (type(data) == "string") then
print_string(dbg,key .. data);
end
else
--log off
end
if dbg then
dbg:close()
end
end
边栏推荐
猜你喜欢

知道创宇上榜CCSIP 2022全景图多个领域

【GoLang】网络连接 net.Dial

Make logic an optimization example in sigma DSP - data distributor

Moonbeam上的多链用例解析——Derek在Polkadot Decoded 2022的演讲文字回顾

Reinforcement learning (II): SARS, with code rewriting

Analyzing the function of human-computer interface module of runtime manager based on autoware

【golang】使用select {}

使用POI,实现excel文件导出,图片url导出文件,图片和excel文件导出压缩包

JS 定时器setInterval clearInterval 延时器setTimeOut 异步 动画

Day01作业
随机推荐
【Golang】- runtime.Goexit()
Some summaries of ibatis script and provider
活动速递| Apache Doris 性能优化实战系列直播课程初公开,诚邀您来参加!
LeetCode 112:路径总和
MySQL execution order
规划数学期末考试模拟二
[netding cup 2020 rosefinch group]nmap
[7.21-26] code source - [sports festival] [Dan fishing war] [maximum weight division]
For a safer experience, Microsoft announced the first PC with a secure Pluto chip
【7.21-26】代码源 - 【体育节】【丹钓战】【最大权值划分】
[understanding of opportunity-54]: plain book-1-the origin of things [original chapter 1]: the road is simple.
覆盖接入2w+交通监测设备,EMQ为深圳市打造交通全要素数字化新引擎
JS timer setinterval clearinterval delayer setTimeout asynchronous animation
【golang】使用select {}
Matplotlib Chinese question
Code reading - ten C open source projects
internship:用于类型判断的工具类编写
HCIA配置实例(eNSP)
Making high-precision map based on autoware (V)
How to choose professional, safe and high-performance remote control software