slog-envlogger 0.4.0

Port of de facto standard logger implementation for Rust, to `slog-rs` framework.
Documentation

slog-envlogger - Port of env_logger as a slog-rs drain

env_logger is a de facto standard Rust logger implementation, which allows controlling logging to stderr via RUST_LOG environment variable.

This is a fork of env_logger that makes it work as a slog-rs drain:

Notable changes:

  • Support for slog-stdlog to provide support for legacy info!(...) like statements.
  • envlogger does not do formatting anymore: slog-envlogger can be composed with any other slog-rs drains, so there's no point for it to provide it's own formatting. You can now output JSON to a file, controlling it via RUST_LOG environment var. envlogger::init() is provided for convenience doing formatting to stderr

Status & news

Warning: Documentation has been been left mostly untouched, which means some places of it might be confusing.

How to use

See examples directory.

The simplest way to convert existing project to use slog-rs+slog-envlogger is:

fn main() {
    slog_envlogger::init().unwrap();

    error!("error");
    info!("info");
    trace!("trace");
}

More proper (and powerful) version would be:

fn main() {
    let term = slog_term::stderr();
    let drain = slog_envlogger::new(term);

    let root_logger = drain.into_logger(o!("build" => "8jdkj2df", "version" => "0.1.5"));

    slog_stdlog::set_logger(root_logger.clone()).unwrap();

    slog_error!(root_logger, "slog error");
    error!("log error");
    slog_info!(root_logger, "slog info");
    info!("log info");
    slog_trace!(root_logger, "slog trace");
    trace!("log trace");
}

Using slog-stdlog scopes you can make parts of the code log additional information (see scopes example):

fn main() {
    slog_envlogger::init().unwrap();

    error!("log error");

    slog_stdlog::scope(
        slog_stdlog::with_current_logger(|l| l.new(o!("scope-extra-data" => "data"))),
        || foo()
    );

    trace!("log trace");
}

fn foo() {
    info!("log info inside foo");

    // scopes can be nested!
    slog_stdlog::scope(
        slog_stdlog::with_current_logger(|l| l.new(o!("even-more-scope-extra-data" => "data2"))),
        || bar()
    );
}

fn bar() {
    info!("log info inside bar");
}