Skip to content

Instantly share code, notes, and snippets.

@Nymphium
Created October 3, 2025 20:45
Show Gist options
  • Save Nymphium/6317aa5746eb884343f74654e583c4a8 to your computer and use it in GitHub Desktop.
Save Nymphium/6317aa5746eb884343f74654e583c4a8 to your computer and use it in GitHub Desktop.
let reporter ~env ~sw =
let stdout = Eio.Stdenv.stdout env in
let report (type a b) _src _level ~over (k : unit -> b) (msgf : (a, b) Logs.msgf) : b =
let res = Atomic.make None in
let k () =
match Atomic.get res with
| Some v -> v
| None ->
let v = k () in
Atomic.set res (Some v);
v
in
let () =
Eio.Fiber.fork ~sw @@ fun () ->
Eio.Buf_write.with_flow ~initial_size:512 stdout @@ fun v ->
ignore
@@ msgf
@@ fun ?header ?tags fmt ->
let f = Eio.Buf_write.make_formatter v in
ignore header;
ignore tags;
Format.kfprintf (fun f -> Format.pp_print_flush f () |> over |> k) f fmt
in
k ()
in
{ Logs.report }
;;
let () =
Eio_main.run @@ fun env ->
Eio.Switch.run @@ fun sw ->
let clock = Eio.Stdenv.clock env in
Logs.set_reporter @@ reporter ~env ~sw;
Logs.err (fun m ->
Eio.Time.sleep clock 2.;
m "hello");
Logs.err (fun m ->
Eio.Time.sleep clock 0.01;
m "world")
;;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment