当前位置:网站首页>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
边栏推荐
- 采用QT进行OpenGL开发(二)绘制立方体
- Alphafold revealed the universe of protein structure - from nearly 1million structures to more than 200million structures
- 【HCIP】两个MGRE网络通过OSPF实现互联(eNSP)
- Leetcode 113: path sum II
- Data security is a competitive advantage. How can companies give priority to information security and compliance
- 【Unity项目实践】合成大西瓜
- 正则过滤数据学习笔记(①)
- mysql的执行顺序
- 知道创宇上榜CCSIP 2022全景图多个领域
- [golang] use select {}
猜你喜欢

采用QT进行OpenGL开发(二)绘制立方体

活动速递| Apache Doris 性能优化实战系列直播课程初公开,诚邀您来参加!

Analyze OP based on autoware_ global_ Planner global path planning module re planning

Plato launched the LAAS protocol elephant swap, which allows users to earn premium income

560 and K

DSP震动座椅

Matplotlib Chinese question

What is the ISO assessment? How to do the waiting insurance scheme

【HCIP】两个MGRE网络通过OSPF实现互联(eNSP)

Leetcode 113: path sum II
随机推荐
【公开课预告】:快手GPU/FPGA/ASIC异构平台的应用探索
正则过滤数据学习笔记(①)
PCL point cloud intensity image
JS事件简介
[7.21-26] code source - [square count] [dictionary order minimum] [Z-type matrix]
Google Cloud Spanner的实践经验
Super technology network security risk assessment service, comprehensively understand the security risks faced by the network system
internship:用于类型判断的工具类编写
知道创宇上榜CCSIP 2022全景图多个领域
numpy. Where() usage and np.argsort() usage
Making high-precision map based on autoware (V)
The brutal rule of blackmail software continues, and attacks increase by 105%
HCIA配置实例(eNSP)
New 1688 API access instructions
【Unity项目实践】合成大西瓜
【流放之路-第六章】
560 and K
【流放之路-第八章】
Come on, handwritten RPC S2 serialization exploration
秘术冬潮烙技能搭配