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