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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
open! Import
include Logging_intf
module Source_code_position = Ppx_irmin_internal_lib.Source_code_position
(** A logs reporter that is aware of the tags added by [ppx_irmin.internal]. *)
let reporter :
?filter_src:(Logs.src -> bool) ->
?prefix:string ->
(module Clock) ->
Logs.reporter =
fun ?(filter_src = Fun.const true) ?(prefix = "") (module Clock) ->
let pad n x =
if String.length x > n then x else x ^ String.make (n - String.length x) ' '
in
let start_time = Clock.counter () in
let report src level ~over k msgf =
let k _ =
over ();
k ()
in
let ppf = match level with Logs.App -> Fmt.stdout | _ -> Fmt.stderr in
let with_stamp h tags k fmt =
let dt = Mtime.span_to_us (Clock.count start_time) in
let source_pos_text, source_pos_colour =
match tags with
| None -> (Logs.Src.name src, `Magenta)
| Some tags ->
let text =
Logs.Tag.find Source_code_position.tag tags
|> Option.fold ~none:"" ~some:(fun (fname, lnum, _, _) ->
Fmt.str "%s:%d" fname lnum)
in
(text, `Faint)
in
Fmt.kpf k ppf
("%s%+04.0fus %a %a @[" ^^ fmt ^^ "@]@.")
prefix dt
Fmt.(styled source_pos_colour string)
(pad 35 source_pos_text) Logs_fmt.pp_header (level, h)
in
msgf @@ fun ? ?tags fmt ->
if filter_src src then with_stamp header tags k fmt
else Format.ikfprintf k ppf fmt
in
{ Logs.report }