aboutsummaryrefslogtreecommitdiff
path: root/src/libjin-lua/scripts/log.lua
diff options
context:
space:
mode:
Diffstat (limited to 'src/libjin-lua/scripts/log.lua')
-rw-r--r--src/libjin-lua/scripts/log.lua93
1 files changed, 93 insertions, 0 deletions
diff --git a/src/libjin-lua/scripts/log.lua b/src/libjin-lua/scripts/log.lua
new file mode 100644
index 0000000..bf88399
--- /dev/null
+++ b/src/libjin-lua/scripts/log.lua
@@ -0,0 +1,93 @@
+--
+-- https://github.com/rxi/log.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
+
+ -- 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
+
+-- Export to Jin.
+
+jin.log = log