summaryrefslogtreecommitdiff
path: root/log.lua
blob: 3d04bfcef28a01ca017b1ec0b1a4fb363deb254e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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