3732
|
1 local pack = require "util.table".pack;
|
|
2 local json = require "util.json";
|
|
3 local array = require "util.array";
|
|
4 local datetime = require "util.datetime".datetime;
|
3746
|
5 local socket = require "socket";
|
3732
|
6
|
|
7 module:set_global();
|
|
8
|
|
9 local function sink_maker(config)
|
3746
|
10 local send = function () end
|
|
11 if config.filename then
|
|
12 local logfile = io.open(config.filename, "a+");
|
|
13 logfile:setvbuf("no");
|
|
14 function send(payload)
|
|
15 logfile:write(payload, "\n");
|
|
16 end
|
|
17 elseif config.udp_host and config.udp_port then
|
|
18 local conn = socket.udp();
|
|
19 conn:connect(config.udphost, config.udpport);
|
|
20 function send(payload)
|
|
21 conn:send(payload);
|
|
22 end
|
|
23 end
|
3732
|
24 return function (source, level, message, ...)
|
|
25 local args = pack(...);
|
|
26 for i = 1, args.n do
|
|
27 if args[i] == nil then
|
|
28 args[i] = json.null;
|
|
29 elseif type(args[i]) ~= "string" or type(args[i]) ~= "number" then
|
|
30 args[i] = tostring(args[i]);
|
|
31 end
|
|
32 end
|
|
33 args.n = nil;
|
|
34 local payload = {
|
|
35 datetime = datetime(),
|
|
36 source = source,
|
|
37 level = level,
|
|
38 message = message,
|
|
39 args = array(args);
|
|
40 };
|
3746
|
41 send(json.encode(payload));
|
3732
|
42 end
|
|
43 end
|
|
44
|
|
45 require"core.loggingmanager".register_sink_type("json", sink_maker);
|