ringlog 0.8.0

A fast and lightweight non-blocking logging framework
Documentation
This crate provides an asynchronous logging backend that can direct logs to one or more outputs. The core of this crate is the `RingLog` type, which is constructed using a builder that is specific to your logging needs. After building the `RingLog`, it can be registered as the global logger using the `start` method. You will be left with a `Box` which should be periodically flushed outside of any critical path. For example, in an admin thread or dedicated logging thread. For logging to a single file, the `LogBuilder` type can be used to construct an `RingLog` which has low overhead, but directs log messages to a single `Output`. A `SamplingLogBuilder` can be used to construct an `RingLog` which will filter the log messages using sampling before directing the log messages to a single `Output`. A `MultiLogBuilder` can be used to construct an `RingLog` which routes log messages based on the `target` metadata of the log `Record`. If there is an `RingLog` registered for that specific `target`, then the log message will be routed to that instance of `RingLog`. Log messages that do not match any specific target will be routed to the default `RingLog` that has been added to the `MultiLogBuilder`. If there is no default, messages that do not match any specific target will be simply dropped. This combination of logging types allows us to compose a logging backend which meets the application's needs. For example, you can use a local log macro to set the target to some specific category and log those messages to a file, while letting all other log messages pass to standard out. This could allow splitting command/access/audit logs from the normal logging.