Mercurial > prosody-modules
annotate mod_log_ringbuffer/mod_log_ringbuffer.lua @ 6403:13c61a068c71
mod_pubsub_serverinfo: Include hostname in default pubsub node name
This change ensures that every host publishes to a unique node by default,
which is important when publishing info about multiple hosts.
The old default node name was "serverinfo"
The new default node name is in the format "serverinfo/example.com" where
example.com is automatically replaced by the publishing host's name.
This affects existing deployments in the following ways:
- If you already configured pubsub_serverinfo_node explicitly in your config,
then nothing will change, your current configuration will still be used.
- If you did not specify it in your config (i.e. used the default) then the
module will switch to publishing to the new node. If your configuration is
correct this shouldn't be noticed, because the new node will automatically
be created and configured by the module. If you want, you can clean up the
old 'serverinfo' node using:
prosodyctl shell pubsub delete_node pubsub.example.com serverinfo
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Wed, 11 Feb 2026 09:40:30 +0000 |
| parents | 8a47791338fc |
| children |
| rev | line source |
|---|---|
|
4205
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1 module:set_global(); |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2 |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
3 local loggingmanager = require "core.loggingmanager"; |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
4 local format = require "util.format".format; |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5 local pposix = require "util.pposix"; |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
6 local rb = require "util.ringbuffer"; |
|
4226
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
7 local queue = require "util.queue"; |
|
4205
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 local default_timestamp = "%b %d %H:%M:%S "; |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
10 local max_chunk_size = module:get_option_number("log_ringbuffer_chunk_size", 16384); |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
11 |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
12 local os_date = os.date; |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
13 |
|
4215
86f8ece24029
mod_log_ringbuffer: Update default filename to include data path
Matthew Wild <mwild1@gmail.com>
parents:
4205
diff
changeset
|
14 local default_filename_template = "{paths.data}/ringbuffer-logs-{pid}-{count}.log"; |
|
4205
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
15 local render_filename = require "util.interpolation".new("%b{}", function (s) return s; end, { |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
16 yyyymmdd = function (t) |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
17 return os_date("%Y%m%d", t); |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
18 end; |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
19 hhmmss = function (t) |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
20 return os_date("%H%M%S", t); |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 end; |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
22 }); |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 local dump_count = 0; |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
25 |
|
4226
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
26 local function dump_buffer(dump, filename) |
|
4205
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
27 dump_count = dump_count + 1; |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
28 local f, err = io.open(filename, "a+"); |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
29 if not f then |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
30 module:log("error", "Unable to open output file: %s", err); |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
31 return; |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
32 end |
|
4226
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
33 f:write(("-- Dumping log buffer at %s --\n"):format(os_date(default_timestamp))); |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
34 dump(f); |
|
4205
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
35 f:write("-- End of dump --\n\n"); |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
36 f:close(); |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
37 end |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
38 |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
39 local function get_filename(filename_template) |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
40 filename_template = filename_template or default_filename_template; |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
41 return render_filename(filename_template, { |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
42 paths = prosody.paths; |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
43 pid = pposix.getpid(); |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
44 count = dump_count; |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
45 time = os.time(); |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
46 }); |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
47 end |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
48 |
|
4226
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
49 local function new_buffer(config) |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
50 local write, dump; |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
51 |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
52 if config.lines then |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
53 local buffer = queue.new(config.lines, true); |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
54 function write(line) |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
55 buffer:push(line); |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
56 end |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
57 function dump(f) |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
58 -- COMPAT w/0.11 - update to use :consume() |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
59 for line in buffer.pop, buffer do |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
60 f:write(line); |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
61 end |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
62 end |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
63 else |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
64 local buffer_size = config.size or 100*1024; |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
65 local buffer = rb.new(buffer_size); |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
66 function write(line) |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
67 if not buffer:write(line) then |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
68 if #line > buffer_size then |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
69 buffer:discard(buffer_size); |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
70 buffer:write(line:sub(-buffer_size)); |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
71 else |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
72 buffer:discard(#line); |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
73 buffer:write(line); |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
74 end |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
75 end |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
76 end |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
77 function dump(f) |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
78 local bytes_remaining = buffer:length(); |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
79 while bytes_remaining > 0 do |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
80 local chunk_size = math.min(bytes_remaining, max_chunk_size); |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
81 local chunk = buffer:read(chunk_size); |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
82 if not chunk then |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
83 return; |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
84 end |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
85 f:write(chunk); |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
86 bytes_remaining = bytes_remaining - chunk_size; |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
87 end |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
88 end |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
89 end |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
90 return write, dump; |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
91 end |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
92 |
|
5853
97c9b76867ca
mod_log_ringbuffer: Detach event handlers on logging reload (thanks Menel)
Kim Alvefur <zash@zash.se>
parents:
5852
diff
changeset
|
93 local event_hooks = {}; |
|
97c9b76867ca
mod_log_ringbuffer: Detach event handlers on logging reload (thanks Menel)
Kim Alvefur <zash@zash.se>
parents:
5852
diff
changeset
|
94 |
|
4205
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
95 local function ringbuffer_log_sink_maker(sink_config) |
|
4226
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
96 local write, dump = new_buffer(sink_config); |
|
4205
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
97 |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
98 local timestamps = sink_config.timestamps; |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
99 |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
100 if timestamps == true or timestamps == nil then |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
101 timestamps = default_timestamp; -- Default format |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
102 elseif timestamps then |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
103 timestamps = timestamps .. " "; |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
104 end |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
105 |
|
4226
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
106 local function handler() |
|
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
107 dump_buffer(dump, sink_config.filename or get_filename(sink_config.filename_template)); |
|
4205
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
108 end |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
109 |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
110 if sink_config.signal then |
|
6333
8a47791338fc
mod_log_ringbuffer: Support multiple triggers simultaneously (e.g. signal + event)
Matthew Wild <mwild1@gmail.com>
parents:
5853
diff
changeset
|
111 local event_name = "signal/"..sink_config.signal; |
|
8a47791338fc
mod_log_ringbuffer: Support multiple triggers simultaneously (e.g. signal + event)
Matthew Wild <mwild1@gmail.com>
parents:
5853
diff
changeset
|
112 module:hook_global(event_name, handler); |
|
8a47791338fc
mod_log_ringbuffer: Support multiple triggers simultaneously (e.g. signal + event)
Matthew Wild <mwild1@gmail.com>
parents:
5853
diff
changeset
|
113 table.insert(event_hooks, { handler, event_name }); |
|
8a47791338fc
mod_log_ringbuffer: Support multiple triggers simultaneously (e.g. signal + event)
Matthew Wild <mwild1@gmail.com>
parents:
5853
diff
changeset
|
114 end |
|
8a47791338fc
mod_log_ringbuffer: Support multiple triggers simultaneously (e.g. signal + event)
Matthew Wild <mwild1@gmail.com>
parents:
5853
diff
changeset
|
115 if sink_config.event then |
|
4226
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
116 module:hook_global(sink_config.event, handler); |
|
6333
8a47791338fc
mod_log_ringbuffer: Support multiple triggers simultaneously (e.g. signal + event)
Matthew Wild <mwild1@gmail.com>
parents:
5853
diff
changeset
|
117 table.insert(event_hooks, { handler, sink_config.event }); |
|
4205
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
118 end |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
119 |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
120 return function (name, level, message, ...) |
|
4225
d6fb9f7afaa5
mod_log_ringbuffer: Discard old data when buffer is full
Matthew Wild <mwild1@gmail.com>
parents:
4219
diff
changeset
|
121 local line = format("%s%s\t%s\t%s\n", timestamps and os_date(timestamps) or "", name, level, format(message, ...)); |
|
4226
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
122 write(line); |
|
4205
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
123 end; |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
124 end |
|
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
125 |
|
5853
97c9b76867ca
mod_log_ringbuffer: Detach event handlers on logging reload (thanks Menel)
Kim Alvefur <zash@zash.se>
parents:
5852
diff
changeset
|
126 module:hook_global("reopen-log-files", function() |
|
6333
8a47791338fc
mod_log_ringbuffer: Support multiple triggers simultaneously (e.g. signal + event)
Matthew Wild <mwild1@gmail.com>
parents:
5853
diff
changeset
|
127 for i, entry in ipairs(event_hooks) do |
|
8a47791338fc
mod_log_ringbuffer: Support multiple triggers simultaneously (e.g. signal + event)
Matthew Wild <mwild1@gmail.com>
parents:
5853
diff
changeset
|
128 local handler, event_name = entry[1], entry[2]; |
|
5853
97c9b76867ca
mod_log_ringbuffer: Detach event handlers on logging reload (thanks Menel)
Kim Alvefur <zash@zash.se>
parents:
5852
diff
changeset
|
129 module:unhook_object_event(prosody.events, event_name, handler); |
|
6333
8a47791338fc
mod_log_ringbuffer: Support multiple triggers simultaneously (e.g. signal + event)
Matthew Wild <mwild1@gmail.com>
parents:
5853
diff
changeset
|
130 event_hooks[i] = nil; |
|
5853
97c9b76867ca
mod_log_ringbuffer: Detach event handlers on logging reload (thanks Menel)
Kim Alvefur <zash@zash.se>
parents:
5852
diff
changeset
|
131 end |
|
97c9b76867ca
mod_log_ringbuffer: Detach event handlers on logging reload (thanks Menel)
Kim Alvefur <zash@zash.se>
parents:
5852
diff
changeset
|
132 end, 1); |
|
97c9b76867ca
mod_log_ringbuffer: Detach event handlers on logging reload (thanks Menel)
Kim Alvefur <zash@zash.se>
parents:
5852
diff
changeset
|
133 |
|
4205
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
134 loggingmanager.register_sink_type("ringbuffer", ringbuffer_log_sink_maker); |
