11 releases (7 breaking)

0.8.0 Jun 26, 2024
0.6.0 Feb 7, 2024
0.4.0 Dec 15, 2023
0.3.2 Oct 25, 2023
0.1.1 Feb 13, 2023

#394 in Asynchronous

Download history 94/week @ 2024-07-21 239/week @ 2024-07-28 308/week @ 2024-08-04 111/week @ 2024-08-11 104/week @ 2024-08-18 105/week @ 2024-08-25 34/week @ 2024-09-01 327/week @ 2024-09-08 166/week @ 2024-09-15 437/week @ 2024-09-22 309/week @ 2024-09-29 195/week @ 2024-10-06 74/week @ 2024-10-13 136/week @ 2024-10-20 85/week @ 2024-10-27 127/week @ 2024-11-03

428 downloads per month

Apache-2.0

115KB
2.5K SLoC

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<dyn Drain> 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.

Dependencies

~1.4–6.5MB
~38K SLoC