sig
  type message = [ `Debug | `Error | `Fatal | `Info | `Warn ] * string
  type size = [ `Kb of int64 | `Mb of int64 | `Unlimited ]
  type 'messagetype t
  type default_t = Logger.message Logger.t
  val create :
    ?max_size:Logger.size ->
    ?mode:Core.Std.Unix.file_perm ->
    ?max_archives:[ `Max of int | `Unlimited ] ->
    ?full_callback:(string Core.Std.Squeue.t -> unit) ->
    ?filter:('messagetype -> bool) ->
    message_to_string:('messagetype -> string) ->
    string -> 'messagetype Logger.t
  val create_default :
    ?max_size:Logger.size ->
    ?mode:Core.Std.Unix.file_perm ->
    ?max_archives:[ `Max of int | `Unlimited ] ->
    ?full_callback:(string Core.Std.Squeue.t -> unit) ->
    string -> Logger.message Logger.t
  val log : 'messagetype Logger.t -> 'messagetype -> unit
  val filter : 'messagetype Logger.t -> ('messagetype -> bool) -> unit
  val clear_filter : 'messagetype Logger.t -> unit
  val maybe_log : 'messagetype Logger.t option -> 'messagetype -> unit
  val timestamp : unit -> string
  val ounit_tests : unit -> OUnit.test
end