mirror of
https://github.com/YunoHost/SSOwat.git
synced 2024-09-03 20:06:27 +02:00
92 lines
2 KiB
Lua
92 lines
2 KiB
Lua
|
--
|
||
|
-- log.lua
|
||
|
--
|
||
|
-- Copyright (c) 2016 rxi
|
||
|
--
|
||
|
-- This library is free software; you can redistribute it and/or modify it
|
||
|
-- under the terms of the MIT license. See LICENSE for details.
|
||
|
--
|
||
|
|
||
|
local log = { _version = "0.1.0" }
|
||
|
|
||
|
log.usecolor = true
|
||
|
log.outfile = nil
|
||
|
log.level = "trace"
|
||
|
|
||
|
|
||
|
local modes = {
|
||
|
{ name = "trace", color = "\27[34m", },
|
||
|
{ name = "debug", color = "\27[36m", },
|
||
|
{ name = "info", color = "\27[32m", },
|
||
|
{ name = "warn", color = "\27[33m", },
|
||
|
{ name = "error", color = "\27[31m", },
|
||
|
{ name = "fatal", color = "\27[35m", },
|
||
|
}
|
||
|
|
||
|
|
||
|
local levels = {}
|
||
|
for i, v in ipairs(modes) do
|
||
|
levels[v.name] = i
|
||
|
end
|
||
|
|
||
|
|
||
|
local round = function(x, increment)
|
||
|
increment = increment or 1
|
||
|
x = x / increment
|
||
|
return (x > 0 and math.floor(x + .5) or math.ceil(x - .5)) * increment
|
||
|
end
|
||
|
|
||
|
|
||
|
local _tostring = tostring
|
||
|
|
||
|
local tostring = function(...)
|
||
|
local t = {}
|
||
|
for i = 1, select('#', ...) do
|
||
|
local x = select(i, ...)
|
||
|
if type(x) == "number" then
|
||
|
x = round(x, .01)
|
||
|
end
|
||
|
t[#t + 1] = _tostring(x)
|
||
|
end
|
||
|
return table.concat(t, " ")
|
||
|
end
|
||
|
|
||
|
|
||
|
for i, x in ipairs(modes) do
|
||
|
local nameupper = x.name:upper()
|
||
|
log[x.name] = function(...)
|
||
|
|
||
|
-- Return early if we're below the log level
|
||
|
if i < levels[log.level] then
|
||
|
return
|
||
|
end
|
||
|
|
||
|
local msg = tostring(...)
|
||
|
local info = debug.getinfo(2, "Sl")
|
||
|
-- local lineinfo = info.short_src .. ":" .. info.currentline
|
||
|
local lineinfo = ""
|
||
|
|
||
|
-- Output to console
|
||
|
print(string.format("%s[%-6s%s]%s %s: %s",
|
||
|
log.usecolor and x.color or "",
|
||
|
nameupper,
|
||
|
os.date("%H:%M:%S"),
|
||
|
log.usecolor and "\27[0m" or "",
|
||
|
lineinfo,
|
||
|
msg))
|
||
|
|
||
|
-- Output to log file
|
||
|
if log.outfile then
|
||
|
local fp = io.open(log.outfile, "a")
|
||
|
local str = string.format("[%-6s%s] %s: %s\n",
|
||
|
nameupper, os.date(), lineinfo, msg)
|
||
|
fp:write(str)
|
||
|
fp:close()
|
||
|
end
|
||
|
|
||
|
end
|
||
|
end
|
||
|
|
||
|
|
||
|
return log
|