[][src]Crate slog_async

Async drain for slog-rs

slog-rs is an ecosystem of reusable components for structured, extensible, composable logging for Rust.

slog-async allows building Drains that offload processing to another thread. Typically, serialization and IO operations are slow enough that they make logging hinder the performance of the main code. Sending log records to another thread is much faster (ballpark of 100ns).

Note: Unlike other logging solutions, slog-rs does not have a hardcoded async logging implementation. This crate is just a reasonable reference implementation. It should have good performance and work well in most use cases. See the documentation and implementation for more details.

It's relatively easy to implement your own slog-rs async logging. Feel free to use this one as a starting point.

Beware of std::process::exit

When using std::process::exit to terminate a process with an exit code, it is important to notice that destructors will not be called. This matters for slog_async as it prevents flushing of the async drain and discards messages that are not yet written.

A way around this issue is encapsulate the construction of the logger into its own function that returns before std::process::exit is called.

// ...
fn main() {
    let _exit_code = run(); // logger gets flushed as `run()` returns.
    // std::process::exit(exit_code) // this needs to be commented or it'll
                                     // end the doctest

fn run() -> i32 {
   // initialize the logger

   // ... do your thing ...

   1 // exit code to return



Async drain


Async builder


Core of Async drain


AsyncCore builder


Async guard



Errors reported by Async


Behavior used when the channel is full.

Type Definitions


AsyncResult alias