init.lua

changeset 238
9b6fca5d9a02
parent 237
d158c97556b4
child 239
65a0d3fcbbad
equal deleted inserted replaced
237:d158c97556b4 238:9b6fca5d9a02
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));

mercurial