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