sig
  module type T =
    sig
      module Priority : Cf_ordered.Total_T
      class virtual ['a] prioritizer :
        object
          method virtual code : '-> Priority.t
          method virtual tag : '-> string
        end
      class ['a] event :
        '#Cf_journal.T.prioritizer ->
        '->
        string ->
        object
          method level : 'a
          method message : string
          method prioritizer : 'Cf_journal.T.prioritizer
        end
      class virtual ['a] archiver :
        object
          constraint 'a = '#Cf_journal.T.event
          method virtual emit : '-> unit
        end
      class virtual ['a] agent :
        '#Cf_journal.T.prioritizer ->
        '->
        'a list ->
        object
          constraint 'a =
            ('#Cf_journal.T.event as 'c) #Cf_journal.T.archiver
          val mutable archivers_ : 'a list
          val mutable limit_ : Priority.t
          method enabled : '-> bool
          method private virtual event : '-> string -> 'c
          method private put :
            ''e.
              '->
              ('-> 'e) -> ('d, unit, string, 'e) Pervasives.format4 -> 'd
          method setlimit : '-> 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 : '-> Priority.t
            method virtual tag : '-> string
          end
        class ['a] event :
          '#prioritizer ->
          '->
          string ->
          object
            method level : 'a
            method message : string
            method prioritizer : 'a prioritizer
          end
        class virtual ['a] archiver :
          object
            constraint 'a = '#event
            method virtual emit : '-> unit
          end
        class virtual ['a] agent :
          '#prioritizer ->
          '->
          'a list ->
          object
            constraint 'a = ('#event as 'c) #archiver
            val mutable archivers_ : 'a list
            val mutable limit_ : Priority.t
            method enabled : '-> bool
            method private virtual event : '-> string -> 'c
            method private put :
              ''e. '-> ('-> 'e) -> ('d, unit, string, 'e) format4 -> 'd
            method setlimit : '-> 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 : '-> Priority.t
          method virtual tag : '-> string
        end
      class ['a] event :
        '#prioritizer ->
        '->
        string ->
        object
          method level : 'a
          method message : string
          method prioritizer : 'a prioritizer
        end
      class virtual ['a] archiver :
        object constraint 'a = '#event method virtual emit : '-> unit end
      class virtual ['a] agent :
        '#prioritizer ->
        '->
        'a list ->
        object
          constraint 'a = ('#event as 'c) #archiver
          val mutable archivers_ : 'a list
          val mutable limit_ : Priority.t
          method enabled : '-> bool
          method private virtual event : '-> string -> 'c
          method private put :
            ''e. '-> ('-> 'e) -> ('d, unit, string, 'e) format4 -> 'd
          method setlimit : '-> 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 : '-> Cf_journal.Basic.Priority.t
      method tag : '-> 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 : '-> unit
    end
  class virtual ['a] basic_agent :
    ([> Cf_journal.Basic.level ] as 'b) #Cf_journal.basic_prioritizer ->
    '->
    'a list ->
    object
      constraint 'a =
        ('#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 : '-> bool
      method error : ('e, unit, string, unit) Pervasives.format4 -> 'e
      method private virtual event : '-> 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 :
        ''m. '-> ('-> 'm) -> ('l, unit, string, 'm) format4 -> 'l
      method setlimit : '-> 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