2 -- Copyright (C) 2008-2010 Matthew Wild
3 -- Copyright (C) 2008-2010 Waqas Hussain
5 -- This project is MIT/X11 licensed. Please see the
6 -- COPYING file in the source package for more information.
11 local find = string.find;
12 local ipairs, pairs, setmetatable = ipairs, pairs, setmetatable;
16 local level_sinks = {};
20 local function init(name)
21 local log_debug = make_logger(name, "debug");
22 local log_info = make_logger(name, "info");
23 local log_warn = make_logger(name, "warn");
24 local log_error = make_logger(name, "error");
26 return function (level, message, ...)
27 if level == "debug" then
28 return log_debug(message, ...);
29 elseif level == "info" then
30 return log_info(message, ...);
31 elseif level == "warn" then
32 return log_warn(message, ...);
33 elseif level == "error" then
34 return log_error(message, ...);
39 function make_logger(source_name, level)
40 local level_handlers = level_sinks[level];
41 if not level_handlers then
43 level_sinks[level] = level_handlers;
46 local logger = function (message, ...)
47 for i = 1,#level_handlers do
48 level_handlers[i](source_name, level, message, ...);
55 local function reset()
56 for level, handler_list in pairs(level_sinks) do
57 -- Clear all handlers for this level
58 for i = 1, #handler_list do
59 handler_list[i] = nil;
64 local function add_level_sink(level, sink_function)
65 if not level_sinks[level] then
66 level_sinks[level] = { sink_function };
68 level_sinks[level][#level_sinks[level] + 1 ] = sink_function;
74 make_logger = make_logger;
76 add_level_sink = add_level_sink;