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