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; |
|
5 |
|
6 module:set_global(); |
|
7 |
|
8 local function sink_maker(config) |
|
9 local logfile = io.open("blah.json", "a"); |
|
10 logfile:setvbuf("no"); |
|
11 return function (source, level, message, ...) |
|
12 local args = pack(...); |
|
13 for i = 1, args.n do |
|
14 if args[i] == nil then |
|
15 args[i] = json.null; |
|
16 elseif type(args[i]) ~= "string" or type(args[i]) ~= "number" then |
|
17 args[i] = tostring(args[i]); |
|
18 end |
|
19 end |
|
20 args.n = nil; |
|
21 local payload = { |
|
22 datetime = datetime(), |
|
23 source = source, |
|
24 level = level, |
|
25 message = message, |
|
26 args = array(args); |
|
27 }; |
|
28 logfile:write(json.encode(payload), "\n"); |
|
29 end |
|
30 end |
|
31 |
|
32 require"core.loggingmanager".register_sink_type("json", sink_maker); |