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);