sig
  type 'a log = ('a, unit Lwt.t) Logs.msgf -> unit Lwt.t
  val msg : ?src:Logs.src -> Logs.level -> 'Logs_lwt.log
  val app : ?src:Logs.src -> 'Logs_lwt.log
  val err : ?src:Logs.src -> 'Logs_lwt.log
  val warn : ?src:Logs.src -> 'Logs_lwt.log
  val info : ?src:Logs.src -> 'Logs_lwt.log
  val debug : ?src:Logs.src -> 'Logs_lwt.log
  val kmsg :
    (unit -> 'Lwt.t) ->
    ?src:Logs.src -> Logs.level -> ('a, 'Lwt.t) Logs.msgf -> 'Lwt.t
  val on_error :
    ?src:Logs.src ->
    ?level:Logs.level ->
    ?header:string ->
    ?tags:Logs.Tag.set ->
    pp:(Stdlib.Format.formatter -> '-> unit) ->
    use:('-> 'Lwt.t) -> ('a, 'b) Stdlib.result Lwt.t -> 'Lwt.t
  val on_error_msg :
    ?src:Logs.src ->
    ?level:Logs.level ->
    ?header:string ->
    ?tags:Logs.Tag.set ->
    use:(unit -> 'Lwt.t) ->
    ('a, [ `Msg of string ]) Stdlib.result Lwt.t -> 'Lwt.t
  module type LOG =
    sig
      val msg : Logs.level -> 'Logs_lwt.log
      val app : 'Logs_lwt.log
      val err : 'Logs_lwt.log
      val warn : 'Logs_lwt.log
      val info : 'Logs_lwt.log
      val debug : 'Logs_lwt.log
      val kmsg :
        ?over:(unit -> unit) ->
        (unit -> 'Lwt.t) ->
        Logs.level -> ('a, 'Lwt.t) Logs.msgf -> 'Lwt.t
      val on_error :
        ?level:Logs.level ->
        ?header:string ->
        ?tags:Logs.Tag.set ->
        pp:(Stdlib.Format.formatter -> '-> unit) ->
        use:('-> 'Lwt.t) -> ('a, 'b) Stdlib.result Lwt.t -> 'Lwt.t
      val on_error_msg :
        ?level:Logs.level ->
        ?header:string ->
        ?tags:Logs.Tag.set ->
        use:(unit -> 'Lwt.t) ->
        ('a, [ `Msg of string ]) Stdlib.result Lwt.t -> 'Lwt.t
    end
  val src_log : Logs.src -> (module Logs_lwt.LOG)
end