diff --git a/src/tef-tldrs/trace_tef_tldrs.ml b/src/tef-tldrs/trace_tef_tldrs.ml index 47584a4..bcd61b2 100644 --- a/src/tef-tldrs/trace_tef_tldrs.ml +++ b/src/tef-tldrs/trace_tef_tldrs.ml @@ -120,11 +120,22 @@ let collector ~out () : collector = | None -> assert false | Some c -> subscriber_ c |> Trace_subscriber.collector +open struct + let register_atexit = + let has_registered = ref false in + fun () -> + if not !has_registered then ( + has_registered := true; + at_exit Trace_core.shutdown + ) +end + let setup ?(out = `Env) () = let role = find_role ~out () in match role with | None -> () | Some c -> + register_atexit (); Trace_core.setup_collector @@ Trace_subscriber.collector @@ subscriber_ c let with_setup ?out () f = diff --git a/src/tef/trace_tef.ml b/src/tef/trace_tef.ml index e29488f..39b9c06 100644 --- a/src/tef/trace_tef.ml +++ b/src/tef/trace_tef.ml @@ -78,7 +78,18 @@ let[@inline] subscriber ~out () : Trace_subscriber.t = let[@inline] collector ~out () : collector = collector_ ~finally:ignore ~mode:`Single ~out () +open struct + let register_atexit = + let has_registered = ref false in + fun () -> + if not !has_registered then ( + has_registered := true; + at_exit Trace_core.shutdown + ) +end + let setup ?(out = `Env) () = + register_atexit (); match out with | `Stderr -> Trace_core.setup_collector @@ collector ~out:`Stderr () | `Stdout -> Trace_core.setup_collector @@ collector ~out:`Stdout ()