Mercurial > prosody-modules
annotate mod_log_ringbuffer/mod_log_ringbuffer.lua @ 4876:0f5f2d4475b9
mod_http_xep227: Add support for import via APIs rather than direct store manipulation
In particular this transitions PEP nodes and data to be imported via mod_pep's
APIs, fixing issues with importing at runtime while PEP data may already be
live in RAM.
Next obvious candidate for this approach is rosters, so clients get immediate
roster pushes and other special handling (such as emitting subscribes to reach
the desired subscription state).
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Tue, 18 Jan 2022 17:01:18 +0000 |
parents | df2ccb42a241 |
children | 133b23758cf6 |
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 |
4205
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
93 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
|
94 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
|
95 |
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
96 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
|
97 |
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
98 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
|
99 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
|
100 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
|
101 timestamps = timestamps .. " "; |
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
102 end |
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
103 |
4226
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
104 local function handler() |
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
105 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
|
106 end |
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
107 |
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
108 if sink_config.signal then |
4226
df2ccb42a241
mod_log_ringbuffer: Add 'lines' option (actually an alternative ringbuffer implementation)
Matthew Wild <mwild1@gmail.com>
parents:
4225
diff
changeset
|
109 require "util.signal".signal(sink_config.signal, handler); |
4205
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
110 elseif 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
|
111 module:hook_global(sink_config.event, handler); |
4205
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
112 end |
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
113 |
481c4d75e77d
mod_log_ringbuffer: New module to send logs to an in-memory ringbuffer
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
114 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
|
115 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
|
116 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
|
117 end; |
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 loggingmanager.register_sink_type("ringbuffer", ringbuffer_log_sink_maker); |