[Tarantool-patches] [PATCH v7 04/11] lua/log: put string constants to map
Cyrill Gorcunov
gorcunov at gmail.com
Tue Jun 2 01:25:00 MSK 2020
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: Oleg Babin <olegrok at tarantool.org>
Reviewed-by: Leonid Vasiliev <lvasiliev at tarantool.org>
Signed-off-by: Cyrill Gorcunov <gorcunov at gmail.com>
---
src/lua/log.lua | 35 +++++++++++++++++++++++++++++------
1 file changed, 29 insertions(+), 6 deletions(-)
diff --git a/src/lua/log.lua b/src/lua/log.lua
index 23529b30e..94d8ca46c 100644
--- a/src/lua/log.lua
+++ b/src/lua/log.lua
@@ -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
--
2.26.2
More information about the Tarantool-patches
mailing list