Mercurial > prosody-modules
comparison mod_log_ringbuffer/mod_log_ringbuffer.lua @ 6333:8a47791338fc
mod_log_ringbuffer: Support multiple triggers simultaneously (e.g. signal + event)
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Thu, 02 Oct 2025 14:41:18 +0100 |
| parents | 97c9b76867ca |
| children |
comparison
equal
deleted
inserted
replaced
| 6332:1fc38a840baa | 6333:8a47791338fc |
|---|---|
| 106 local function handler() | 106 local function handler() |
| 107 dump_buffer(dump, sink_config.filename or get_filename(sink_config.filename_template)); | 107 dump_buffer(dump, sink_config.filename or get_filename(sink_config.filename_template)); |
| 108 end | 108 end |
| 109 | 109 |
| 110 if sink_config.signal then | 110 if sink_config.signal then |
| 111 module:hook_global("signal/"..sink_config.signal, handler); | 111 local event_name = "signal/"..sink_config.signal; |
| 112 event_hooks[handler] = "signal/"..sink_config.signal; | 112 module:hook_global(event_name, handler); |
| 113 elseif sink_config.event then | 113 table.insert(event_hooks, { handler, event_name }); |
| 114 end | |
| 115 if sink_config.event then | |
| 114 module:hook_global(sink_config.event, handler); | 116 module:hook_global(sink_config.event, handler); |
| 115 event_hooks[handler] = sink_config.event; | 117 table.insert(event_hooks, { handler, sink_config.event }); |
| 116 end | 118 end |
| 117 | 119 |
| 118 return function (name, level, message, ...) | 120 return function (name, level, message, ...) |
| 119 local line = format("%s%s\t%s\t%s\n", timestamps and os_date(timestamps) or "", name, level, format(message, ...)); | 121 local line = format("%s%s\t%s\t%s\n", timestamps and os_date(timestamps) or "", name, level, format(message, ...)); |
| 120 write(line); | 122 write(line); |
| 121 end; | 123 end; |
| 122 end | 124 end |
| 123 | 125 |
| 124 module:hook_global("reopen-log-files", function() | 126 module:hook_global("reopen-log-files", function() |
| 125 for handler, event_name in pairs(event_hooks) do | 127 for i, entry in ipairs(event_hooks) do |
| 128 local handler, event_name = entry[1], entry[2]; | |
| 126 module:unhook_object_event(prosody.events, event_name, handler); | 129 module:unhook_object_event(prosody.events, event_name, handler); |
| 127 event_hooks[handler] = nil; | 130 event_hooks[i] = nil; |
| 128 end | 131 end |
| 129 end, 1); | 132 end, 1); |
| 130 | 133 |
| 131 loggingmanager.register_sink_type("ringbuffer", ringbuffer_log_sink_maker); | 134 loggingmanager.register_sink_type("ringbuffer", ringbuffer_log_sink_maker); |
