lua-ln/src/ln.lua

100 lines
1.6 KiB
Lua

local json = require "dkjson"
local function time()
return os.date "%Y-%m-%dT%H:%M:%S"
end
local function quote(value)
if string.find(value, " ") then
return string.format("%q", value)
end
return value
end
local LogfmtFormatter = {}
function LogfmtFormatter:format(tbl)
local message = "time=\"" .. time() .. "\" "
for k, v in pairs(tbl) do
message = message .. k .. "=" .. quote(v) .. " "
end
return message
end
function LogfmtFormatter:new()
local o = {}
setmetatable(o, self)
self.__index = self
return o
end
local JSONFormatter = {}
function JSONFormatter:format(tbl)
tbl["time"] = time()
return json.encode(tbl)
end
function JSONFormatter:new()
local o = {}
setmetatable(o, self)
self.__index = self
return o
end
local Logger = {}
function Logger:err(err, ...)
self:log({err = err}, ...)
end
function Logger:log(...)
local result = {}
local args = table.pack(...)
for i=1, args.n do
if type(args[i]) == "table" then
for k, v in pairs(args[i]) do
result[tostring(k)] = tostring(v)
end
end
end
message = self.formatter:format(result)
print(message)
end
function Logger:new(formatter)
if formatter == nil then
formatter = LogfmtFormatter:new()
end
local o = {
formatter = formatter,
}
setmetatable(o, self)
self.__index = self
return o
end
local default_logger = Logger:new()
local function log(...)
default_logger:log(...)
end
local function err(why, ...)
default_logger:err(why, ...)
end
return {
default_logger = default_logger,
Logger = Logger,
LogfmtFormatter = LogfmtFormatter,
JSONFormatter = JSONFormatter,
log = log,
err = err,
}