diff options
| author | rebecca <ubq323@ubq323.website> | 2026-09-13 14:55:10 +0100 |
|---|---|---|
| committer | rebecca <ubq323@ubq323.website> | 2026-09-13 14:55:10 +0100 |
| commit | dbb98dbb0233f8d9fd6a31849de4e297d838189a (patch) | |
| tree | 2c20dd91c59bf345e9a5cfda50a2031673a7da9b /log.lua | |
| parent | af5285331ec224b14a3de9eda7e3db648603084b (diff) | |
add Log class
Diffstat (limited to 'log.lua')
| -rw-r--r-- | log.lua | 42 |
1 files changed, 42 insertions, 0 deletions
@@ -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 + |
