Skip to content

Commit 1c61c39

Browse files
committed
new flag ?enable_logging to disable regular logs (not debug)
1 parent 7639acf commit 1c61c39

File tree

7 files changed

+35
-15
lines changed

7 files changed

+35
-15
lines changed

src/Tiny_httpd.ml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ open struct
2727
slice.len <- 0
2828
end
2929

30-
let create ?(masksigpipe = not Sys.win32) ?max_connections ?(timeout = 0.0)
31-
?buf_size ?(get_time_s = Unix.gettimeofday)
30+
let create ?enable_logging ?(masksigpipe = not Sys.win32) ?max_connections
31+
?(timeout = 0.0) ?buf_size ?(get_time_s = Unix.gettimeofday)
3232
?(new_thread = fun f -> ignore (Thread.create f () : Thread.t))
3333
?(addr = "127.0.0.1") ?(port = 8080) ?sock ?middlewares () : t =
3434
let max_connections = get_max_connection_ ?max_connections () in
@@ -65,4 +65,4 @@ let create ?(masksigpipe = not Sys.win32) ?max_connections ?(timeout = 0.0)
6565
let tcp_server () = tcp_server_builder
6666
end in
6767
let backend = (module B : IO_BACKEND) in
68-
Server.create_from ?buf_size ?middlewares ~backend ()
68+
Server.create_from ?enable_logging ?buf_size ?middlewares ~backend ()

src/Tiny_httpd.mli

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ include module type of struct
125125
end
126126

127127
val create :
128+
?enable_logging:bool ->
128129
?masksigpipe:bool ->
129130
?max_connections:int ->
130131
?timeout:float ->
@@ -167,6 +168,8 @@ val create :
167168
systemd on Linux (or launchd on macOS). If passed in, this socket will be
168169
used instead of the [addr] and [port]. If not passed in, those will be
169170
used. This parameter exists since 0.10.
171+
@param enable_logging if true and [Logs] is installed, log requests. Default true.
172+
This parameter exists since NEXT_RELEASE. Does not affect debug-level logs.
170173
171174
@param get_time_s obtain the current timestamp in seconds.
172175
This parameter exists since 0.11.

src/core/log.default.ml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@ let debug _ = ()
55
let error _ = ()
66
let setup ~debug:_ () = ()
77
let dummy = true
8+
let fully_disable = ignore

src/core/log.logs.ml

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
(* Use Logs *)
22

3-
module Log = (val Logs.(src_log @@ Src.create "tiny_httpd"))
3+
let log_src = Logs.Src.create "tiny_httpd"
4+
5+
module Log = (val Logs.(src_log log_src))
46

57
let info k = Log.info (fun fmt -> k (fun x -> fmt ?header:None ?tags:None x))
68
let debug k = Log.debug (fun fmt -> k (fun x -> fmt ?header:None ?tags:None x))
@@ -15,8 +17,9 @@ let setup ~debug () =
1517
Logs.set_level ~all:true
1618
(Some
1719
(if debug then
18-
Logs.Debug
19-
else
20-
Logs.Info))
20+
Logs.Debug
21+
else
22+
Logs.Info))
2123

2224
let dummy = false
25+
let fully_disable () = Logs.Src.set_level log_src None

src/core/log.mli

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,8 @@ val setup : debug:bool -> unit -> unit
1010
@param debug if true, set logging to debug (otherwise info) *)
1111

1212
val dummy : bool
13+
14+
val fully_disable : unit -> unit
15+
(** Totally silence logs for tiny_httpd. With [Logs] installed this means setting
16+
the level of the tiny_httpd source to [None].
17+
@since NEXT_RELEASE *)

src/core/server.ml

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ let unwrap_handler_result req = function
8484

8585
type t = {
8686
backend: (module IO_BACKEND);
87+
enable_logging: bool;
8788
mutable tcp_server: IO.TCP_server.t option;
8889
mutable handler: IO.Input.t Request.t -> Response.t;
8990
(** toplevel handler, if any *)
@@ -250,7 +251,7 @@ let add_route_server_sent_handler ?accept ?(middlewares = []) self route f =
250251
end in
251252
(try f req (module SSG : SERVER_SENT_GENERATOR)
252253
with Exit_SSE -> IO.Output.close oc);
253-
Log.info (fun k -> k "closed SSE connection")
254+
if self.enable_logging then Log.info (fun k -> k "closed SSE connection")
254255
in
255256
add_route_handler_ self ?accept ~meth:`GET route ~tr_req f
256257
@@ -272,11 +273,13 @@ let add_upgrade_handler ?(accept = fun _ -> Ok ()) ?(middlewares = [])
272273
273274
let clear_bytes_ bs = Bytes.fill bs 0 (Bytes.length bs) '\x00'
274275
275-
let create_from ?(buf_size = 16 * 1_024) ?(middlewares = []) ~backend () : t =
276+
let create_from ?(enable_logging = not Log.dummy) ?(buf_size = 16 * 1_024)
277+
?(middlewares = []) ~backend () : t =
276278
let handler _req = Response.fail ~code:404 "no top handler" in
277279
let self =
278280
{
279281
backend;
282+
enable_logging;
280283
tcp_server = None;
281284
handler;
282285
path_handlers = [];
@@ -326,7 +329,7 @@ let client_handle_for (self : t) ~client_addr ic oc : unit =
326329
327330
(* how to log the response to this query *)
328331
let log_response (req : _ Request.t) (resp : Response.t) =
329-
if not Log.dummy then (
332+
if self.enable_logging && not Log.dummy then (
330333
let msgf k =
331334
let elapsed = B.get_time_s () -. req.start_time in
332335
k
@@ -353,14 +356,14 @@ let client_handle_for (self : t) ~client_addr ic oc : unit =
353356
let handle_exn e bt : unit =
354357
let msg = Printexc.to_string e in
355358
let resp = Response.fail ~code:500 "server error: %s" msg in
356-
if not Log.dummy then log_exn msg bt;
359+
if self.enable_logging && not Log.dummy then log_exn msg bt;
357360
Response.Private_.output_ ~bytes:bytes_res oc resp
358361
in
359362
360363
let handle_bad_req req e bt =
361364
let msg = Printexc.to_string e in
362365
let resp = Response.fail ~code:500 "server error: %s" msg in
363-
if not Log.dummy then (
366+
if self.enable_logging && not Log.dummy then (
364367
log_exn msg bt;
365368
log_response req resp
366369
);
@@ -393,7 +396,8 @@ let client_handle_for (self : t) ~client_addr ic oc : unit =
393396
match UP.handshake client_addr req with
394397
| Error msg ->
395398
(* fail the upgrade *)
396-
Log.error (fun k -> k "upgrade failed: %s" msg);
399+
if self.enable_logging then
400+
Log.error (fun k -> k "upgrade failed: %s" msg);
397401
send_resp @@ Response.make_raw ~code:429 "upgrade required"
398402
| Ok (headers, handshake_st) ->
399403
(* send the upgrade reply *)

src/core/server.mli

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ module type IO_BACKEND = sig
8181
end
8282

8383
val create_from :
84+
?enable_logging:bool ->
8485
?buf_size:int ->
8586
?middlewares:([ `Encoding | `Stage of int ] * Middleware.t) list ->
8687
backend:(module IO_BACKEND) ->
@@ -94,6 +95,9 @@ val create_from :
9495
9596
@param buf_size size for buffers (since 0.11)
9697
@param middlewares see {!add_middleware} for more details.
98+
@param enable_logging if true and [Logs] is installed,
99+
emit logs via Logs (since NEXT_RELEASE).
100+
Default [true].
97101
98102
@since 0.14
99103
*)
@@ -117,7 +121,7 @@ val add_decode_request_cb :
117121
t ->
118122
(unit Request.t -> (unit Request.t * (IO.Input.t -> IO.Input.t)) option) ->
119123
unit
120-
[@@deprecated "use add_middleware"]
124+
[@@deprecated "use add_middleware"]
121125
(** Add a callback for every request.
122126
The callback can provide a stream transformer and a new request (with
123127
modified headers, typically).
@@ -129,7 +133,7 @@ val add_decode_request_cb :
129133

130134
val add_encode_response_cb :
131135
t -> (unit Request.t -> Response.t -> Response.t option) -> unit
132-
[@@deprecated "use add_middleware"]
136+
[@@deprecated "use add_middleware"]
133137
(** Add a callback for every request/response pair.
134138
Similarly to {!add_encode_response_cb} the callback can return a new
135139
response, for example to compress it.

0 commit comments

Comments
 (0)