fix JSON encode bug + improve logging function

This commit is contained in:
DanyLE 2023-07-07 19:51:33 +02:00
parent a6838e5294
commit 7dcfa9c8f0
2 changed files with 28 additions and 8 deletions

View File

@ -126,17 +126,34 @@ function loadscript(file, args)
end end
end end
-- logging helpers local __MSG = function(fmt,...)
local va = {...}
if va then
local out = {}
for i,v in ipairs(va) do
local esc = v:gsub("[%%]", {["%"] = "%%"})
table.insert(out, esc)
end
va = out
end
local log_msg = fmt
local ret,msg = pcall(function() return string.format(fmt, table.unpack(va)) end)
if msg then
log_msg = msg
end
return log_msg
end
function LOG_INFO(fmt, ...) function LOG_INFO(fmt, ...)
fcgio:log_info(string.format(fmt or "LOG", ...)) fcgio:log_info(__MSG(fmt or "INFO",table.unpack({...})))
end end
function LOG_ERROR(fmt, ...) function LOG_ERROR(fmt, ...)
fcgio:log_error(string.format(fmt or "ERROR", ...)) fcgio:log_error(__MSG(fmt or "ERROR",table.unpack({...})))
end end
function LOG_DEBUG(fmt, ...) function LOG_DEBUG(fmt, ...)
fcgio:log_debug(string.format(fmt or "ERROR", ...)) fcgio:log_debug(__MSG(fmt or "DEBUG",table.unpack({...})))
end end
function LOG_WARN(fmt, ...) function LOG_WARN(fmt, ...)

View File

@ -20,7 +20,7 @@ function utils.is_array(table)
return true return true
end end
function utils.escape(s) function utils.escape(s, ignore_percent)
local replacements = { local replacements = {
["\\"] = "\\\\", ["\\"] = "\\\\",
['"'] = '\\"', ['"'] = '\\"',
@ -28,9 +28,11 @@ function utils.escape(s)
["\t"] = "\\t", ["\t"] = "\\t",
["\b"] = "\\b", ["\b"] = "\\b",
["\f"] = "\\f", ["\f"] = "\\f",
["\r"] = "\\r", ["\r"] = "\\r"
["%"] = "%%"
} }
if not ignore_percent then
replacements["%"] = "%%"
end
return (s:gsub("[\\'\"\n\t\b\f\r%%]", replacements)) return (s:gsub("[\\'\"\n\t\b\f\r%%]", replacements))
end end
@ -194,7 +196,8 @@ function JSON.encode(obj)
end end
elseif t == 'string' then elseif t == 'string' then
-- print('"'..utils.escape(obj)..'"') -- print('"'..utils.escape(obj)..'"')
return '"' .. utils.escape(obj) .. '"' -- ignore % escape as this is for a LUA using
return '"' .. utils.escape(obj, true) .. '"'
elseif t == 'boolean' or t == 'number' then elseif t == 'boolean' or t == 'number' then
return tostring(obj) return tostring(obj)
elseif obj == nil then elseif obj == nil then