From dbb98dbb0233f8d9fd6a31849de4e297d838189a Mon Sep 17 00:00:00 2001 From: rebecca Date: Sun, 13 Sep 2026 14:55:10 +0100 Subject: add Log class --- log.lua | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 log.lua (limited to 'log.lua') 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 + -- cgit v1.2.3