sig   type level = Logs.level = App | Error | Warning | Info | Debug   val level : unit -> level option   val set_level : ?all:bool -> level option -> unit   val pp_level : Format.formatter -> level -> unit   val level_to_string : level option -> string   val level_of_string :     string -> (level option, [ `Msg of string ]) Result.result   type src = Logs.src   val default : src   module Src :     sig       type t = Logs.src       val create : ?doc:string -> string -> Logs.src       val name : Logs.src -> string       val doc : Logs.src -> string       val level : Logs.src -> Logs.level option       val set_level : Logs.src -> Logs.level option -> unit       val equal : Logs.src -> Logs.src -> bool       val compare : Logs.src -> Logs.src -> int       val pp : Format.formatter -> Logs.src -> unit       val list : unit -> Logs.src list     end   module Tag :     sig       type 'a def = 'Logs.Tag.def       type def_e = Logs.Tag.def_e = Def : 'a def -> def_e       val def :         ?doc:string -> string -> (Format.formatter -> '-> unit) -> 'a def       val name : 'a def -> string       val doc : 'a def -> string       val printer : 'a def -> Format.formatter -> '-> unit       val pp_def : Format.formatter -> 'a def -> unit       val list : unit -> def_e list       type t = Logs.Tag.t = V : 'a def * '-> t       val pp : Format.formatter -> t -> unit       type set = Logs.Tag.set       val empty : set       val is_empty : set -> bool       val mem : 'a def -> set -> bool       val add : 'a def -> '-> set -> set       val rem : 'a def -> set -> set       val find : 'a def -> set -> 'a option       val get : 'a def -> set -> 'a       val fold : (t -> '-> 'a) -> set -> '-> 'a       val pp_set : Format.formatter -> set -> unit     end   type ('a, 'b) msgf =       (?header:string ->        ?tags:Tag.set -> ('a, Format.formatter, unit, 'b) format4 -> 'a) ->       'b   type 'a log = ('a, unit) msgf -> unit   val msg : ?src:src -> level -> 'a log   val app : ?src:src -> 'a log   val err : ?src:src -> 'a log   val warn : ?src:src -> 'a log   val info : ?src:src -> 'a log   val debug : ?src:src -> 'a log   val kmsg : (unit -> 'b) -> ?src:src -> level -> ('a, 'b) msgf -> 'b   val on_error :     ?src:src ->     ?level:level ->     ?header:string ->     ?tags:Tag.set ->     pp:(Format.formatter -> '-> unit) ->     use:('-> 'a) -> ('a, 'b) Result.result -> 'a   val on_error_msg :     ?src:src ->     ?level:level ->     ?header:string ->     ?tags:Tag.set ->     use:(unit -> 'a) -> ('a, [ `Msg of string ]) Result.result -> 'a   module type LOG =     sig       val msg : level -> 'a log       val app : 'a log       val err : 'a log       val warn : 'a log       val info : 'a log       val debug : 'a log       val kmsg : (unit -> 'b) -> level -> ('a, 'b) msgf -> 'b       val on_error :         ?level:level ->         ?header:string ->         ?tags:Tag.set ->         pp:(Format.formatter -> '-> unit) ->         use:('-> 'a) -> ('a, 'b) Result.result -> 'a       val on_error_msg :         ?level:level ->         ?header:string ->         ?tags:Tag.set ->         use:(unit -> 'a) -> ('a, [ `Msg of string ]) Result.result -> 'a     end   val src_log : src -> (module LOG)   type reporter =     Logs.reporter = {     report :       ''b.         src ->         level -> over:(unit -> unit) -> (unit -> 'b) -> ('a, 'b) msgf -> 'b;   }   val nop_reporter : reporter   val format_reporter :     ?pp_header:(Format.formatter -> level * string option -> unit) ->     ?app:Format.formatter -> ?dst:Format.formatter -> unit -> reporter   val reporter : unit -> reporter   val set_reporter : reporter -> unit   val report :     src ->     level -> over:(unit -> unit) -> (unit -> 'b) -> ('a, 'b) msgf -> 'b   val incr_err_count : unit -> unit   val incr_warn_count : unit -> unit   val pp_print_text : Format.formatter -> string -> unit   val pp_header : Format.formatter -> level * string option -> unit   val err_count : unit -> int   val warn_count : unit -> int end