sig
  type 'a logger = ('a, unit, string, unit) format4 -> 'a
  module type LOGGER =
    sig
      val set_lev : Syslog.lev -> unit
      val get_lev : unit -> Syslog.lev
      val may_log : Syslog.lev -> bool
      val generic : Syslog.lev -> 'a logger
      val debug : 'a logger
      val info : 'a logger
      val notice : 'a logger
      val warning : 'a logger
      val err : 'a logger
      val crit : 'a logger
      val alert : 'a logger
      val emerg : 'a logger
    end
  module type SPEC = sig val logger : Syslog.lev -> string -> unit end
  module MakeLogger :
    functor (Spec : SPEC->
      sig
        val set_lev : Syslog.lev -> unit
        val get_lev : unit -> Syslog.lev
        val may_log : Syslog.lev -> bool
        val generic : Syslog.lev -> 'a logger
        val debug : 'a logger
        val info : 'a logger
        val notice : 'a logger
        val warning : 'a logger
        val err : 'a logger
        val crit : 'a logger
        val alert : 'a logger
        val emerg : 'a logger
      end
  module MakeChannel :
    functor (ChannelSpec : sig val oc : out_channel end->
      sig
        val set_lev : Syslog.lev -> unit
        val get_lev : unit -> Syslog.lev
        val may_log : Syslog.lev -> bool
        val generic : Syslog.lev -> 'a logger
        val debug : 'a logger
        val info : 'a logger
        val notice : 'a logger
        val warning : 'a logger
        val err : 'a logger
        val crit : 'a logger
        val alert : 'a logger
        val emerg : 'a logger
      end
  module Stderr :
    sig
      val set_lev : Syslog.lev -> unit
      val get_lev : unit -> Syslog.lev
      val may_log : Syslog.lev -> bool
      val generic : Syslog.lev -> 'a logger
      val debug : 'a logger
      val info : 'a logger
      val notice : 'a logger
      val warning : 'a logger
      val err : 'a logger
      val crit : 'a logger
      val alert : 'a logger
      val emerg : 'a logger
    end
  module Syslog :
    sig
      val set_lev : Syslog.lev -> unit
      val get_lev : unit -> Syslog.lev
      val may_log : Syslog.lev -> bool
      val generic : Syslog.lev -> 'a logger
      val debug : 'a logger
      val info : 'a logger
      val notice : 'a logger
      val warning : 'a logger
      val err : 'a logger
      val crit : 'a logger
      val alert : 'a logger
      val emerg : 'a logger
    end
  module Ignore :
    sig
      val set_lev : Syslog.lev -> unit
      val get_lev : unit -> Syslog.lev
      val may_log : Syslog.lev -> bool
      val generic : Syslog.lev -> 'a logger
      val debug : 'a logger
      val info : 'a logger
      val notice : 'a logger
      val warning : 'a logger
      val err : 'a logger
      val crit : 'a logger
      val alert : 'a logger
      val emerg : 'a logger
    end
end