summaryrefslogtreecommitdiff
path: root/log.lua
diff options
context:
space:
mode:
Diffstat (limited to 'log.lua')
-rw-r--r--log.lua42
1 files changed, 42 insertions, 0 deletions
diff --git a/log.lua b/log.lua
new file mode 100644
index 0000000..3d04bfc
--- /dev/null
+++ b/log.lua
@@ -0,0 +1,42 @@
+local pprint = require 'pprint'
+local class = require 'r.class'
+local qw = require 'r.qw'
+
+local Log = class()
+function Log.make(cls, name, level)
+ return setmetatable({
+ name=name,
+ level = level or 'info',
+ },cls)
+end
+local levels = qw"debug info warn error"
+function Log.format(self, level, ...)
+ local vals = {} for i=1,select('#',...) do
+ vals[i] = tostring(select(i,...)) end
+ return (level == 'error' and '\x1b[31m' or '')
+ ..os.date"%Y-%m-%d %H:%M:%S%z"
+ .. ' ' .. level .. (" "):rep(5-#level)
+ .. ' [' .. self.name .. '] '
+ .. table.concat(vals,' ') .. '\x1b[0m' .. '\n'
+end
+function Log.msg(self,level,...)
+ if levels[level] < levels[self.level] then return end
+ io.stderr:write(self:format(level, ...))
+ io.stderr:flush()
+end
+for i,v in ipairs(levels) do
+ levels[v]=i
+ Log[v] = function(self,...) self:msg(v,...) end
+end
+Log.__call = Log.info
+
+-- handle errors correctly
+function Log.loop(self, cq)
+ local ok, err, code, thread, pollee, fd = cq:loop()
+ local msg = debug.traceback(thread, err)
+ self:error(err)
+ error('👉'..self.name..' '..msg,0)
+end
+
+return Log
+