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.
8 -- luacheck: ignore 213/level
14 local level_sinks = {};
18 local function init(name)
19 local log_debug = make_logger(name, "debug");
20 local log_info = make_logger(name, "info");
21 local log_warn = make_logger(name, "warn");
22 local log_error = make_logger(name, "error");
24 return function (level, message, ...)
25 if level == "debug" then
26 return log_debug(message, ...);
27 elseif level == "info" then
28 return log_info(message, ...);
29 elseif level == "warn" then
30 return log_warn(message, ...);
31 elseif level == "error" then
32 return log_error(message, ...);
37 function make_logger(source_name, level)
38 local level_handlers = level_sinks[level];
39 if not level_handlers then
41 level_sinks[level] = level_handlers;
44 local logger = function (message, ...)
45 for i = 1,#level_handlers do
46 level_handlers[i](source_name, level, message, ...);
53 local function reset()
54 for level, handler_list in pairs(level_sinks) do
55 -- Clear all handlers for this level
56 for i = 1, #handler_list do
57 handler_list[i] = nil;
62 local function add_level_sink(level, sink_function)
63 if not level_sinks[level] then
64 level_sinks[level] = { sink_function };
66 level_sinks[level][#level_sinks[level] + 1 ] = sink_function;
72 make_logger = make_logger;
74 add_level_sink = add_level_sink;