sig
  module type T =
    sig
      module Priority : Cf_ordered.Total_T
      class virtual ['a] prioritizer :
        object
          method virtual code : 'a -> Priority.t
          method virtual tag : 'a -> string
        end
      class ['a] event :
        'a #Cf_journal.T.prioritizer ->
        'a ->
        string ->
        object
          method level : 'a
          method message : string
          method prioritizer : 'a Cf_journal.T.prioritizer
        end
      class virtual ['a] archiver :
        object
          constraint 'a = 'b #Cf_journal.T.event
          method virtual emit : 'a -> unit
        end
      class virtual ['a] agent :
        'b #Cf_journal.T.prioritizer ->
        'b ->
        'a list ->
        object
          constraint 'a =
            ('b #Cf_journal.T.event as 'c) #Cf_journal.T.archiver
          val mutable archivers_ : 'a list
          val mutable limit_ : Priority.t
          method enabled : 'b -> bool
          method private virtual event : 'b -> string -> 'c
          method private put :
            'd 'e.
              'b ->
              ('c -> 'e) -> ('d, unit, string, 'e) Pervasives.format4 -> 'd
          method setlimit : 'b -> unit
        end
    end
  module Create :
    functor (P : Cf_ordered.Total_T) ->
      sig
        module Priority : sig type t = P.t val compare : t -> t -> int end
        class virtual ['a] prioritizer :
          object
            method virtual code : 'a -> Priority.t
            method virtual tag : 'a -> string
          end
        class ['a] event :
          'a #prioritizer ->
          'a ->
          string ->
          object
            method level : 'a
            method message : string
            method prioritizer : 'a prioritizer
          end
        class virtual ['a] archiver :
          object
            constraint 'a = 'b #event
            method virtual emit : 'a -> unit
          end
        class virtual ['a] agent :
          'b #prioritizer ->
          'b ->
          'a list ->
          object
            constraint 'a = ('b #event as 'c) #archiver
            val mutable archivers_ : 'a list
            val mutable limit_ : Priority.t
            method enabled : 'b -> bool
            method private virtual event : 'b -> string -> 'c
            method private put :
              'd 'e. 'b -> ('c -> 'e) -> ('d, unit, string, 'e) format4 -> 'd
            method setlimit : 'b -> unit
          end
      end
  module Basic :
    sig
      module Priority : sig type t = int val compare : t -> t -> int end
      class virtual ['a] prioritizer :
        object
          method virtual code : 'a -> Priority.t
          method virtual tag : 'a -> string
        end
      class ['a] event :
        'a #prioritizer ->
        'a ->
        string ->
        object
          method level : 'a
          method message : string
          method prioritizer : 'a prioritizer
        end
      class virtual ['a] archiver :
        object constraint 'a = 'b #event method virtual emit : 'a -> unit end
      class virtual ['a] agent :
        'b #prioritizer ->
        'b ->
        'a list ->
        object
          constraint 'a = ('b #event as 'c) #archiver
          val mutable archivers_ : 'a list
          val mutable limit_ : Priority.t
          method enabled : 'b -> bool
          method private virtual event : 'b -> string -> 'c
          method private put :
            'd 'e. 'b -> ('c -> 'e) -> ('d, unit, string, 'e) format4 -> 'd
          method setlimit : 'b -> unit
        end
      type invalid = [ `Invalid ]
      type fail = [ `Fail ]
      type error = [ `Error ]
      type warn = [ `Warn ]
      type notice = [ `Notice ]
      type info = [ `Info ]
      type debug = [ `Debug ]
      type basic =
          [ `Debug | `Error | `Fail | `Info | `Invalid | `Notice | `Warn ]
      type enable = [ `All | `None ]
      type level =
          [ `All
          | `Debug
          | `Error
          | `Fail
          | `Info
          | `Invalid
          | `None
          | `Notice
          | `Warn ]
    end
  class ['a] basic_prioritizer :
    object
      constraint 'a = [> Cf_journal.Basic.level ]
      method code : 'a -> Cf_journal.Basic.Priority.t
      method tag : 'a -> string
    end
  class ['a] basic_channel_archiver :
    Pervasives.out_channel ->
    object
      constraint 'a = [> Cf_journal.Basic.level ] #Cf_journal.Basic.event
      method channel : Pervasives.out_channel
      method emit : 'a -> unit
    end
  class virtual ['a] basic_agent :
    ([> Cf_journal.Basic.level ] as 'b) #Cf_journal.basic_prioritizer ->
    'b ->
    'a list ->
    object
      constraint 'a =
        ('b #Cf_journal.Basic.event as 'c) #Cf_journal.Basic.archiver
      val mutable archivers_ : 'a list
      val mutable limit_ : Basic.Priority.t
      method debug : ('d, unit, string, bool) Pervasives.format4 -> 'd
      method enabled : 'b -> bool
      method error : ('e, unit, string, unit) Pervasives.format4 -> 'e
      method private virtual event : 'b -> string -> 'c
      method fail : ('f, unit, string, 'g) Pervasives.format4 -> 'f
      method info : ('h, unit, string, unit) Pervasives.format4 -> 'h
      method invalid : ('i, unit, string, 'j) Pervasives.format4 -> 'i
      method notice : ('k, unit, string, unit) Pervasives.format4 -> 'k
      method private put :
        'l 'm. 'b -> ('c -> 'm) -> ('l, unit, string, 'm) format4 -> 'l
      method setlimit : 'b -> unit
      method warn : ('n, unit, string, unit) Pervasives.format4 -> 'n
    end
  type t =
      Cf_journal.Basic.level Cf_journal.Basic.event Cf_journal.Basic.archiver
      Cf_journal.basic_agent
  val stdout : Cf_journal.t
  val stderr : Cf_journal.t
end