101 lines
1.7 KiB
Lua
101 lines
1.7 KiB
Lua
local _LEVELS = {
|
|
debug = 1,
|
|
verbose = 2,
|
|
info = 3,
|
|
warn = 4,
|
|
error = 5,
|
|
quiet = 6
|
|
}
|
|
|
|
local _NGX_LEVELS = {
|
|
[1] = ngx.DEBUG,
|
|
-- verbose
|
|
[3] = ngx.INFO,
|
|
[4] = ngx.WARN,
|
|
[5] = ngx.ERR,
|
|
-- quiet
|
|
}
|
|
|
|
local r_levels = {}
|
|
for k, v in pairs(_LEVELS) do
|
|
r_levels[v] = k
|
|
end
|
|
|
|
local log_lvl = _LEVELS.info
|
|
local old_lvl
|
|
|
|
local _M = {
|
|
levels = _LEVELS
|
|
}
|
|
|
|
function _M.set_lvl(lvl)
|
|
if r_levels[lvl] then
|
|
log_lvl = lvl
|
|
end
|
|
end
|
|
|
|
function _M.disable()
|
|
if not old_lvl then
|
|
old_lvl = log_lvl
|
|
log_lvl = _LEVELS.quiet
|
|
end
|
|
end
|
|
|
|
function _M.enable()
|
|
log_lvl = old_lvl or log_lvl
|
|
old_lvl = nil
|
|
end
|
|
|
|
function _M.log(lvl, ...)
|
|
local format
|
|
local args = {...}
|
|
|
|
for i = 1, #args do
|
|
args[i] = tostring(args[i])
|
|
end
|
|
|
|
if lvl >= log_lvl then
|
|
format = table.remove(args, 1)
|
|
if type(format) ~= "string" then
|
|
error("expected argument #1 or #2 to be a string", 3)
|
|
end
|
|
|
|
local msg = string.format(format, unpack(args))
|
|
|
|
if not ngx.IS_CLI then
|
|
local ngx_lvl = _NGX_LEVELS[lvl]
|
|
if ngx_lvl then
|
|
ngx.log(ngx_lvl, msg)
|
|
end
|
|
|
|
return
|
|
end
|
|
|
|
if log_lvl < _LEVELS.info or lvl >= _LEVELS.warn then
|
|
msg = string.format("%s [%s] %s", os.date("%Y/%m/%d %H:%M:%S"), r_levels[lvl], msg)
|
|
end
|
|
|
|
if lvl < _LEVELS.warn then
|
|
print(msg)
|
|
else
|
|
io.stderr:write(msg .. "\n")
|
|
end
|
|
end
|
|
end
|
|
|
|
_M.deprecation = require "kong.deprecation"
|
|
|
|
return setmetatable(_M, {
|
|
__call = function(_, ...)
|
|
return _M.log(_LEVELS.info, ...)
|
|
end,
|
|
__index = function(t, key)
|
|
if _LEVELS[key] then
|
|
return function(...)
|
|
_M.log(_LEVELS[key], ...)
|
|
end
|
|
end
|
|
return rawget(t, key)
|
|
end
|
|
})
|