1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
include Stdune
let with_mutex m ~f =
Mutex.lock m;
let res = f () in
Mutex.unlock m;
res
module Json = struct
type t = Yojson.Safe.t
let pp ppf (t : t) = Yojson.Safe.pretty_print ppf t
end
module Log = struct
let level : (string option -> bool) ref = ref (fun _ -> false)
let out = ref Format.err_formatter
type message =
{ message : string
; payload : (string * Json.t) list
}
let msg message payload = { message; payload }
let log ?section k =
if !level section then (
let message = k () in
( match section with
| None -> Format.fprintf !out "%s@." message.message
| Some section -> Format.fprintf !out "[%s] %s@." section message.message
);
( match message.payload with
| [] -> ()
| fields -> Format.fprintf !out "%a@." Json.pp (`Assoc fields) );
Format.pp_print_flush !out ()
)
end