20 verse.plugins = {}; |
20 verse.plugins = {}; |
21 |
21 |
22 function verse.new(logger, base) |
22 function verse.new(logger, base) |
23 local t = setmetatable(base or {}, stream); |
23 local t = setmetatable(base or {}, stream); |
24 t.id = tostring(t):match("%x*$"); |
24 t.id = tostring(t):match("%x*$"); |
25 t:set_logger(logger or verse.log, true); |
25 t.logger = logger or verse.new_logger("stream"..t.id); |
26 t.events = events.new(); |
26 t.events = events.new(); |
27 t.plugins = {}; |
27 t.plugins = {}; |
28 return t; |
28 return t; |
29 end |
29 end |
30 |
30 |
31 verse.add_task = require "util.timer".add_task; |
31 verse.add_task = require "util.timer".add_task; |
32 |
32 |
33 verse.logger = logger.init; -- Deprecated |
33 verse.logger = logger.init; -- COMPAT: Deprecated |
34 verse.new_logger = logger.init; |
34 verse.new_logger = logger.init; |
35 verse.log = verse.logger("verse"); |
35 verse.log = verse.logger("verse"); |
36 |
36 |
37 function verse.set_logger(logger) |
37 function verse.set_log_handler(log_handler, levels) |
38 verse.log = logger; |
38 levels = levels or { "debug", "info", "warn", "error" }; |
39 server.setlogger(logger); |
39 logger.reset(); |
40 end |
40 for i, level in ipairs(levels) do |
41 |
41 logger.add_level_sink(level, log_handler); |
42 function verse.filter_log(levels, logger) |
|
43 local level_set = {}; |
|
44 for _, level in ipairs(levels) do |
|
45 level_set[level] = true; |
|
46 end |
42 end |
47 return function (level, name, ...) |
|
48 if level_set[level] then |
|
49 return logger(level, name, ...); |
|
50 end |
|
51 end; |
|
52 end |
43 end |
53 |
44 |
54 local function error_handler(err) |
45 local function error_handler(err) |
55 verse.log("error", "Error: %s", err); |
46 verse.log("error", "Error: %s", err); |
56 verse.log("error", "Traceback: %s", debug.traceback()); |
47 verse.log("error", "Traceback: %s", debug.traceback()); |
112 on_disconnect(conn, reason); |
103 on_disconnect(conn, reason); |
113 end |
104 end |
114 |
105 |
115 -- Logging functions |
106 -- Logging functions |
116 function stream:debug(...) |
107 function stream:debug(...) |
117 if self.logger and self.log.debug then |
108 return self.logger("debug", ...); |
118 return self.logger("debug", ...); |
|
119 end |
|
120 end |
109 end |
121 |
110 |
122 function stream:warn(...) |
111 function stream:warn(...) |
123 if self.logger and self.log.warn then |
112 return self.logger("warn", ...); |
124 return self.logger("warn", ...); |
|
125 end |
|
126 end |
113 end |
127 |
114 |
128 function stream:error(...) |
115 function stream:error(...) |
129 if self.logger and self.log.error then |
116 return self.logger("error", ...); |
130 return self.logger("error", ...); |
|
131 end |
|
132 end |
|
133 |
|
134 function stream:set_logger(logger, levels) |
|
135 local old_logger = self.logger; |
|
136 if logger then |
|
137 self.logger = logger; |
|
138 end |
|
139 if levels then |
|
140 if levels == true then |
|
141 levels = { "debug", "info", "warn", "error" }; |
|
142 end |
|
143 self.log = {}; |
|
144 for _, level in ipairs(levels) do |
|
145 self.log[level] = true; |
|
146 end |
|
147 end |
|
148 return old_logger; |
|
149 end |
|
150 |
|
151 function stream_mt:set_log_levels(levels) |
|
152 self:set_logger(nil, levels); |
|
153 end |
117 end |
154 |
118 |
155 -- Event handling |
119 -- Event handling |
156 function stream:event(name, ...) |
120 function stream:event(name, ...) |
157 self:debug("Firing event: "..tostring(name)); |
121 self:debug("Firing event: "..tostring(name)); |