module Blocking: sig .. end
Async programs often have a non-async portion that runs before the scheduler begins
      to capture command line options, do setup, read configs, etc.  This module provides
      limited global logging functions to be used during that period.  Calling these
      functions after the scheduler has started will raise an exception.  They otherwise
      behave similarly to the logging functions in the async world.
module Output: sig .. end
val set_level : Log.Level.t -> unit
val set_output : Output.t -> unit
val raw : ?tags:(string * string) list ->
       ('a, unit, string, unit) Pervasives.format4 -> 'a
raw printf like logging for raw (no level) messages.  Raw messages are still
      output with a timestamp.
val info : ?tags:(string * string) list ->
       ('a, unit, string, unit) Pervasives.format4 -> 'a
info printf like logging at the `Info log level
val error : ?tags:(string * string) list ->
       ('a, unit, string, unit) Pervasives.format4 -> 'a
error printf like logging at the `Info log level
val debug : ?tags:(string * string) list ->
       ('a, unit, string, unit) Pervasives.format4 -> 'a
error printf like logging at the `Info log level