sig
  type log
  type level = NONE | FATAL | ERROR | WARN | NOTICE | INFO | DEBUG
  val make_log : string -> BatLogger.log
  val log_name : BatLogger.log -> string
  val log_enable : BatLogger.log -> BatLogger.level -> unit
  val log_level : BatLogger.log -> BatLogger.level
  val log_enabled : BatLogger.log -> BatLogger.level -> bool
  type event = string * (string * string) list
  val log :
    BatLogger.log -> BatLogger.level -> (unit -> BatLogger.event) -> unit
  val with_log :
    BatLogger.log ->
    BatLogger.level ->
    (unit -> BatLogger.event) -> ?result:('-> string) -> (unit -> 'a) -> 'a
  type formatter =
      BatLogger.log -> BatLogger.level -> BatLogger.event -> float -> unit
  val register_formatter : string -> BatLogger.formatter -> unit
  val unregister_formatter : string -> unit
  val make_std_formatter : 'BatIO.output -> BatLogger.formatter
  val stderr_formatter : BatLogger.formatter
  val null_formatter : BatLogger.formatter
  val make_dbg_formatter : 'BatIO.output -> BatLogger.formatter
  val dbg_formatter : BatLogger.formatter
  val init : (string * BatLogger.level) list -> BatLogger.formatter -> unit
  val init_from_string : string -> BatLogger.formatter -> unit
  val level_of_name : string -> BatLogger.level
  val name_of_level : BatLogger.level -> string
  val format_timestamp : 'BatIO.output -> float -> unit
end