Skip to content
Snippets Groups Projects
Commit 94ef2cf4 authored by Cyrill Gorcunov's avatar Cyrill Gorcunov Committed by Kirill Yukhin
Browse files

lua/log: put string constants to map


This allows us to reuse them instead of copying
opencoded constants. They are highly bound to
ones compiled into the C code.

Part-of #689

Reviewed-by: default avatarOleg Babin <olegrok@tarantool.org>
Reviewed-by: default avatarLeonid Vasiliev <lvasiliev@tarantool.org>
Signed-off-by: default avatarCyrill Gorcunov <gorcunov@gmail.com>
parent b9e68ab5
No related branches found
No related tags found
No related merge requests found
......@@ -81,6 +81,26 @@ local special_fields = {
"error_msg"
}
-- Map format number to string.
local fmt_num2str = {
[ffi.C.SF_PLAIN] = "plain",
[ffi.C.SF_JSON] = "json",
}
-- Map format string to number.
local fmt_str2num = {
["plain"] = ffi.C.SF_PLAIN,
["json"] = ffi.C.SF_JSON,
}
local function fmt_list()
local keyset = {}
for k in pairs(fmt_str2num) do
keyset[#keyset + 1] = k
end
return table.concat(keyset, ',')
end
local function say(level, fmt, ...)
if ffi.C.log_level < level then
-- don't waste cycles on debug.getinfo()
......@@ -102,7 +122,7 @@ local function say(level, fmt, ...)
fmt = json.encode(fmt)
if ffi.C.log_format == ffi.C.SF_JSON then
-- indicate that message is already encoded in JSON
format = "json"
format = fmt_num2str[ffi.C.SF_JSON]
end
elseif type_fmt ~= 'string' then
fmt = tostring(fmt)
......@@ -133,16 +153,19 @@ local function log_level(level)
return ffi.C.say_set_log_level(level)
end
local function log_format(format_name)
if format_name == "json" then
local function log_format(name)
if not fmt_str2num[name] then
local m = "log_format: expected %s"
error(m:format(fmt_list()))
end
if fmt_str2num[name] == ffi.C.SF_JSON then
if ffi.C.log_type() == ffi.C.SAY_LOGGER_SYSLOG then
error("log_format: 'json' can't be used with syslog logger")
end
ffi.C.say_set_log_format(ffi.C.SF_JSON)
elseif format_name == "plain" then
ffi.C.say_set_log_format(ffi.C.SF_PLAIN)
else
error("log_format: expected 'json' or 'plain'")
ffi.C.say_set_log_format(ffi.C.SF_PLAIN)
end
end
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment