author | Kim Alvefur <zash@zash.se> |
Wed, 13 Nov 2019 17:57:54 +0100 | |
changeset 3752 | 27abf3b6819a |
parent 3751 | f288177f4c5d |
child 3762 | 900ea02ab00b |
permissions | -rw-r--r-- |
3736 | 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; |
|
3750 | 5 |
local socket = require "socket"; |
3736 | 6 |
|
7 |
module:set_global(); |
|
8 |
||
9 |
local function sink_maker(config) |
|
3750 | 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(); |
|
3752
27abf3b6819a
mod_log_json: Use correct method to specify remote endpoint
Kim Alvefur <zash@zash.se>
parents:
3751
diff
changeset
|
19 |
conn:setpeername(config.udp_host, config.udp_port); |
3750 | 20 |
function send(payload) |
21 |
conn:send(payload); |
|
22 |
end |
|
23 |
end |
|
3736 | 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 |
}; |
|
3750 | 41 |
send(json.encode(payload)); |
3736 | 42 |
end |
43 |
end |
|
44 |
||
45 |
require"core.loggingmanager".register_sink_type("json", sink_maker); |