let detailed_logger inner_handler request = let method_str = Dream.method_to_string (Dream.method_ request) in let path = Dream.target request in let user_agent = Dream.header request "User-Agent" |> Option.value ~default:"unknown" in let client_ip = Dream.client request in let%lwt () = Lwt_io.printf "%s %s %s - %s - %s\n" (Ptime_clock.now () |> Ptime.to_rfc3339) method_str path client_ip user_agent in let%lwt response = inner_handler request in let status = Dream.status response |> Dream.status_to_int in let%lwt () = Lwt_io.printf " -> %d\n" status in Lwt.return response