Mercurial > prosody-hg
comparison util/logger.lua @ 3554:1770f8aaf04a
util.logger: Remove my precious premature optimisation :(
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Thu, 04 Nov 2010 08:37:39 +0000 |
| parents | bc139431830b |
| children | d00fc909296e |
comparison
equal
deleted
inserted
replaced
| 3553:1f0af8572f15 | 3554:1770f8aaf04a |
|---|---|
| 13 | 13 |
| 14 module "logger" | 14 module "logger" |
| 15 | 15 |
| 16 local name_sinks, level_sinks = {}, {}; | 16 local name_sinks, level_sinks = {}, {}; |
| 17 local name_patterns = {}; | 17 local name_patterns = {}; |
| 18 | |
| 19 -- Weak-keyed so that loggers are collected | |
| 20 local modify_hooks = setmetatable({}, { __mode = "k" }); | |
| 21 | 18 |
| 22 local make_logger; | 19 local make_logger; |
| 23 local outfunction = nil; | 20 local outfunction = nil; |
| 24 | 21 |
| 25 function init(name) | 22 function init(name) |
| 52 level_sinks[level] = level_handlers; | 49 level_sinks[level] = level_handlers; |
| 53 end | 50 end |
| 54 | 51 |
| 55 local source_handlers = name_sinks[source_name]; | 52 local source_handlers = name_sinks[source_name]; |
| 56 | 53 |
| 57 -- All your premature optimisation is belong to me! | |
| 58 local num_level_handlers, num_source_handlers = #level_handlers, source_handlers and #source_handlers; | |
| 59 | |
| 60 local logger = function (message, ...) | 54 local logger = function (message, ...) |
| 61 if source_handlers then | 55 if source_handlers then |
| 62 for i = 1,num_source_handlers do | 56 for i = 1,#source_handlers do |
| 63 if source_handlers[i](source_name, level, message, ...) == false then | 57 if source_handlers[i](source_name, level, message, ...) == false then |
| 64 return; | 58 return; |
| 65 end | 59 end |
| 66 end | 60 end |
| 67 end | 61 end |
| 68 | 62 |
| 69 for i = 1,num_level_handlers do | 63 for i = 1,#level_handlers do |
| 70 level_handlers[i](source_name, level, message, ...); | 64 level_handlers[i](source_name, level, message, ...); |
| 71 end | 65 end |
| 72 end | 66 end |
| 73 | 67 |
| 74 -- To make sure our cached lengths stay in sync with reality | |
| 75 modify_hooks[logger] = function () num_level_handlers, num_source_handlers = #level_handlers, source_handlers and #source_handlers; end; | |
| 76 | |
| 77 return logger; | 68 return logger; |
| 78 end | 69 end |
| 79 | 70 |
| 80 function setwriter(f) | 71 function setwriter(f) |
| 81 local old_func = outfunction; | 72 local old_func = outfunction; |
| 95 for i = 1, #handler_list do | 86 for i = 1, #handler_list do |
| 96 handler_list[i] = nil; | 87 handler_list[i] = nil; |
| 97 end | 88 end |
| 98 end | 89 end |
| 99 for k in pairs(name_patterns) do name_patterns[k] = nil; end | 90 for k in pairs(name_patterns) do name_patterns[k] = nil; end |
| 100 | |
| 101 for _, modify_hook in pairs(modify_hooks) do | |
| 102 modify_hook(); | |
| 103 end | |
| 104 end | 91 end |
| 105 | 92 |
| 106 function add_level_sink(level, sink_function) | 93 function add_level_sink(level, sink_function) |
| 107 if not level_sinks[level] then | 94 if not level_sinks[level] then |
| 108 level_sinks[level] = { sink_function }; | 95 level_sinks[level] = { sink_function }; |
| 109 else | 96 else |
| 110 level_sinks[level][#level_sinks[level] + 1 ] = sink_function; | 97 level_sinks[level][#level_sinks[level] + 1 ] = sink_function; |
| 111 end | 98 end |
| 112 | |
| 113 for _, modify_hook in pairs(modify_hooks) do | |
| 114 modify_hook(); | |
| 115 end | |
| 116 end | 99 end |
| 117 | 100 |
| 118 function add_name_sink(name, sink_function, exclusive) | 101 function add_name_sink(name, sink_function, exclusive) |
| 119 if not name_sinks[name] then | 102 if not name_sinks[name] then |
| 120 name_sinks[name] = { sink_function }; | 103 name_sinks[name] = { sink_function }; |
| 121 else | 104 else |
| 122 name_sinks[name][#name_sinks[name] + 1] = sink_function; | 105 name_sinks[name][#name_sinks[name] + 1] = sink_function; |
| 123 end | |
| 124 | |
| 125 for _, modify_hook in pairs(modify_hooks) do | |
| 126 modify_hook(); | |
| 127 end | 106 end |
| 128 end | 107 end |
| 129 | 108 |
| 130 function add_name_pattern_sink(name_pattern, sink_function, exclusive) | 109 function add_name_pattern_sink(name_pattern, sink_function, exclusive) |
| 131 if not name_patterns[name_pattern] then | 110 if not name_patterns[name_pattern] then |
