logsley 0.1.8

Opinionated logging library
Documentation
// You should do logging like this.

fn main() {
    let _global_logger_guard = logsley::configure("info").unwrap();
    logsley::thread_scope("main", || {
        // Log named values:
        logsley::error!("logsley error {}", 1; "x" => 2);
        logsley::warn!("logsley warn {}", 1; "x" => 2);
        logsley::info!("logsley info {}", 1; "x" => 2);
        logsley::debug!("logsley debug {}", 1; "x" => 2);
        logsley::trace!("logsley trace {}", 1; "x" => 2);

        // Log simple messages:
        log::info!("log {}", 1);

        std::thread::spawn(|| {
            logsley::thread_scope("thread1", || {
                logsley::info!("logsley in thread {}", 1; "x" => 2);
                log::info!("log in thread {}", 1);
            })
        })
        .join()
        .unwrap();

        async_std::task::block_on(logsley::task_scope("task1", async move {
            logsley::info!("logsley in task {}", 1; "x" => 2);
            log::info!("log in task {}", 1);
        }));

        panic!("uhoh");
    });
}

// $ cargo run --package logsley --example opinion
// {"time_ns":1604899904064111000,"time":"2020-11-08T21:31:44.064-08:00","module":"opinion","level":"ERROR","message":"logsley error 1","thread":"main","x":2}
// {"time_ns":1604899904064926000,"time":"2020-11-08T21:31:44.064-08:00","module":"opinion","level":"WARN","message":"logsley warn 1","thread":"main","x":2}
// {"time_ns":1604899904065007000,"time":"2020-11-08T21:31:44.065-08:00","module":"opinion","level":"INFO","message":"logsley info 1","thread":"main","x":2}
// {"time_ns":1604899904065070000,"time":"2020-11-08T21:31:44.065-08:00","module":"opinion","level":"INFO","message":"log 1","thread":"main"}
// {"time_ns":1604899904065111000,"time":"2020-11-08T21:31:44.065-08:00","module":"opinion","level":"INFO","message":"logsley in thread 1","thread":"thread1","x":2}
// {"time_ns":1604899904065166000,"time":"2020-11-08T21:31:44.065-08:00","module":"opinion","level":"INFO","message":"log in thread 1","thread":"thread1"}
// {"time_ns":1604899904065241000,"time":"2020-11-08T21:31:44.065-08:00","module":"opinion","level":"INFO","message":"logsley in task 1","task":"task1","thread":"main","x":2}
// {"time_ns":1604899904065292000,"time":"2020-11-08T21:31:44.065-08:00","module":"opinion","level":"INFO","message":"log in task 1","task":"task1","thread":"main"}
// {"time_ns":1604899904955593000,"time":"2020-11-08T21:31:44.955-08:00","module":"log_panics","level":"ERROR","message":"thread 'main' panicked at 'uhoh': examples/opinion.rs:30\n   0: backtrace::backtrace::libunwind::trace\n             at /Users/user/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.54/src/backtrace/libunwind.rs:90:5\n      backtrace::backtrace::trace_unsynchronized\n             at /Users/user/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.54/src/backtrace/mod.rs:66:5\n   1: backtrace::backtrace::trace\n             at /Users/user/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.54/src/backtrace/mod.rs:53:14\n   2: backtrace::capture::Backtrace::create\n             at /Users/user/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.54/src/capture.rs:176:9\n   3: backtrace::capture::Backtrace::new\n             at /Users/user/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.54/src/capture.rs:140:22\n   4: log_panics::init::{{closure}}\n             at /Users/user/.cargo/registry/src/github.com-1ecc6299db9ec823/log-panics-2.0.0/src/lib.rs:52:25\n   5: std::panicking::rust_panic_with_hook\n             at /rustc/4c78178b1c6ee26e493edb58cefaa77ca44e3991/library/std/src/panicking.rs:581:17\n   6: std::panicking::begin_panic::{{closure}}\n             at /Users/user/.rustup/toolchains/beta-x86_64-apple-darwin/lib/rustlib/src/rust/library/std/src/panicking.rs:506:9\n   7: std::sys_common::backtrace::__rust_end_short_backtrace\n             at /Users/user/.rustup/toolchains/beta-x86_64-apple-darwin/lib/rustlib/src/rust/library/std/src/sys_common/backtrace.rs:153:18\n   8: std::panicking::begin_panic\n             at /Users/user/.rustup/toolchains/beta-x86_64-apple-darwin/lib/rustlib/src/rust/library/std/src/panicking.rs:505:12\n   9: opinion::main::{{closure}}\n             at examples/opinion.rs:30:9\n  10: slog_scope::scope\n             at /Users/user/.cargo/registry/src/github.com-1ecc6299db9ec823/slog-scope-4.3.0/lib.rs:248:5\n  11: logsley::thread_scope\n             at src/lib.rs:179:5\n  12: opinion::main\n             at examples/opinion.rs:5:5\n  13: core::ops::function::FnOnce::call_once\n             at /Users/user/.rustup/toolchains/beta-x86_64-apple-darwin/lib/rustlib/src/rust/library/core/src/ops/function.rs:227:5\n  14: std::sys_common::backtrace::__rust_begin_short_backtrace\n             at /Users/user/.rustup/toolchains/beta-x86_64-apple-darwin/lib/rustlib/src/rust/library/std/src/sys_common/backtrace.rs:137:18\n  15: std::rt::lang_start::{{closure}}\n             at /Users/user/.rustup/toolchains/beta-x86_64-apple-darwin/lib/rustlib/src/rust/library/std/src/rt.rs:66:18\n  16: core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once\n             at /rustc/4c78178b1c6ee26e493edb58cefaa77ca44e3991/library/core/src/ops/function.rs:259:13\n      std::panicking::try::do_call\n             at /rustc/4c78178b1c6ee26e493edb58cefaa77ca44e3991/library/std/src/panicking.rs:381:40\n      std::panicking::try\n             at /rustc/4c78178b1c6ee26e493edb58cefaa77ca44e3991/library/std/src/panicking.rs:345:19\n      std::panic::catch_unwind\n             at /rustc/4c78178b1c6ee26e493edb58cefaa77ca44e3991/library/std/src/panic.rs:382:14\n      std::rt::lang_start_internal\n             at /rustc/4c78178b1c6ee26e493edb58cefaa77ca44e3991/library/std/src/rt.rs:51:25\n  17: std::rt::lang_start\n             at /Users/user/.rustup/toolchains/beta-x86_64-apple-darwin/lib/rustlib/src/rust/library/std/src/rt.rs:65:5\n  18: _main\n","thread":"main"}

// $ DEV_LOG_FORMAT=plain cargo run --package logsley --example opinion
// 2020-11-08T21:32:10.659-08:00 ERRO logsley error 1, x: 2, thread: main
// 2020-11-08T21:32:10.660-08:00 WARN logsley warn 1, x: 2, thread: main
// 2020-11-08T21:32:10.660-08:00 INFO logsley info 1, x: 2, thread: main
// 2020-11-08T21:32:10.660-08:00 INFO log 1, thread: main
// 2020-11-08T21:32:10.660-08:00 INFO logsley in thread 1, x: 2, thread: thread1
// 2020-11-08T21:32:10.660-08:00 INFO log in thread 1, thread: thread1
// 2020-11-08T21:32:10.660-08:00 INFO logsley in task 1, x: 2, task: task1, thread: main
// 2020-11-08T21:32:10.660-08:00 INFO log in task 1, task: task1, thread: main
// 2020-11-08T21:32:11.557-08:00 ERRO thread 'main' panicked at 'uhoh': examples/opinion.rs:30
//    0: backtrace::backtrace::libunwind::trace
//              at /Users/user/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.54/src/backtrace/libunwind.rs:90:5
//       backtrace::backtrace::trace_unsynchronized
//              at /Users/user/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.54/src/backtrace/mod.rs:66:5
//    1: backtrace::backtrace::trace
//              at /Users/user/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.54/src/backtrace/mod.rs:53:14
//    2: backtrace::capture::Backtrace::create
//              at /Users/user/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.54/src/capture.rs:176:9
//    3: backtrace::capture::Backtrace::new
//              at /Users/user/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.54/src/capture.rs:140:22
//    4: log_panics::init::{{closure}}
//              at /Users/user/.cargo/registry/src/github.com-1ecc6299db9ec823/log-panics-2.0.0/src/lib.rs:52:25
//    5: std::panicking::rust_panic_with_hook
//              at /rustc/4c78178b1c6ee26e493edb58cefaa77ca44e3991/library/std/src/panicking.rs:581:17
//    6: std::panicking::begin_panic::{{closure}}
//              at /Users/user/.rustup/toolchains/beta-x86_64-apple-darwin/lib/rustlib/src/rust/library/std/src/panicking.rs:506:9
//    7: std::sys_common::backtrace::__rust_end_short_backtrace
//              at /Users/user/.rustup/toolchains/beta-x86_64-apple-darwin/lib/rustlib/src/rust/library/std/src/sys_common/backtrace.rs:153:18
//    8: std::panicking::begin_panic
//              at /Users/user/.rustup/toolchains/beta-x86_64-apple-darwin/lib/rustlib/src/rust/library/std/src/panicking.rs:505:12
//    9: opinion::main::{{closure}}
//              at examples/opinion.rs:30:9
//   10: slog_scope::scope
//              at /Users/user/.cargo/registry/src/github.com-1ecc6299db9ec823/slog-scope-4.3.0/lib.rs:248:5
//   11: logsley::thread_scope
//              at src/lib.rs:179:5
//   12: opinion::main
//              at examples/opinion.rs:5:5
//   13: core::ops::function::FnOnce::call_once
//              at /Users/user/.rustup/toolchains/beta-x86_64-apple-darwin/lib/rustlib/src/rust/library/core/src/ops/function.rs:227:5
//   14: std::sys_common::backtrace::__rust_begin_short_backtrace
//              at /Users/user/.rustup/toolchains/beta-x86_64-apple-darwin/lib/rustlib/src/rust/library/std/src/sys_common/backtrace.rs:137:18
//   15: std::rt::lang_start::{{closure}}
//              at /Users/user/.rustup/toolchains/beta-x86_64-apple-darwin/lib/rustlib/src/rust/library/std/src/rt.rs:66:18
//   16: core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once
//              at /rustc/4c78178b1c6ee26e493edb58cefaa77ca44e3991/library/core/src/ops/function.rs:259:13
//       std::panicking::try::do_call
//              at /rustc/4c78178b1c6ee26e493edb58cefaa77ca44e3991/library/std/src/panicking.rs:381:40
//       std::panicking::try
//              at /rustc/4c78178b1c6ee26e493edb58cefaa77ca44e3991/library/std/src/panicking.rs:345:19
//       std::panic::catch_unwind
//              at /rustc/4c78178b1c6ee26e493edb58cefaa77ca44e3991/library/std/src/panic.rs:382:14
//       std::rt::lang_start_internal
//              at /rustc/4c78178b1c6ee26e493edb58cefaa77ca44e3991/library/std/src/rt.rs:51:25
//   17: std::rt::lang_start
//              at /Users/user/.rustup/toolchains/beta-x86_64-apple-darwin/lib/rustlib/src/rust/library/std/src/rt.rs:65:5
//   18: _main
// , thread: main

// The 'full' format is like 'plain' but shows severity in color.
// $ DEV_LOG_FORMAT=full cargo run --package logsley --example opinion
// 2020-11-08T21:34:04.516-08:00 ERRO logsley error 1, x: 2, thread: main
// 2020-11-08T21:34:04.517-08:00 WARN logsley warn 1, x: 2, thread: main
// 2020-11-08T21:34:04.517-08:00 INFO logsley info 1, x: 2, thread: main
// 2020-11-08T21:34:04.517-08:00 INFO log 1, thread: main
// 2020-11-08T21:34:04.517-08:00 INFO logsley in thread 1, x: 2, thread: thread1
// 2020-11-08T21:34:04.517-08:00 INFO log in thread 1, thread: thread1
// 2020-11-08T21:34:04.517-08:00 INFO logsley in task 1, x: 2, task: task1, thread: main
// 2020-11-08T21:34:04.517-08:00 INFO log in task 1, task: task1, thread: main
// 2020-11-08T21:34:05.411-08:00 ERRO thread 'main' panicked at 'uhoh': examples/opinion.rs:30
//    0: backtrace::backtrace::libunwind::trace
//              at /Users/user/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.54/src/backtrace/libunwind.rs:90:5
//       backtrace::backtrace::trace_unsynchronized
//              at /Users/user/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.54/src/backtrace/mod.rs:66:5
//    1: backtrace::backtrace::trace
//              at /Users/user/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.54/src/backtrace/mod.rs:53:14
//    2: backtrace::capture::Backtrace::create
//              at /Users/user/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.54/src/capture.rs:176:9
//    3: backtrace::capture::Backtrace::new
//              at /Users/user/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.54/src/capture.rs:140:22
//    4: log_panics::init::{{closure}}
//              at /Users/user/.cargo/registry/src/github.com-1ecc6299db9ec823/log-panics-2.0.0/src/lib.rs:52:25
//    5: std::panicking::rust_panic_with_hook
//              at /rustc/4c78178b1c6ee26e493edb58cefaa77ca44e3991/library/std/src/panicking.rs:581:17
//    6: std::panicking::begin_panic::{{closure}}
//              at /Users/user/.rustup/toolchains/beta-x86_64-apple-darwin/lib/rustlib/src/rust/library/std/src/panicking.rs:506:9
//    7: std::sys_common::backtrace::__rust_end_short_backtrace
//              at /Users/user/.rustup/toolchains/beta-x86_64-apple-darwin/lib/rustlib/src/rust/library/std/src/sys_common/backtrace.rs:153:18
//    8: std::panicking::begin_panic
//              at /Users/user/.rustup/toolchains/beta-x86_64-apple-darwin/lib/rustlib/src/rust/library/std/src/panicking.rs:505:12
//    9: opinion::main::{{closure}}
//              at examples/opinion.rs:30:9
//   10: slog_scope::scope
//              at /Users/user/.cargo/registry/src/github.com-1ecc6299db9ec823/slog-scope-4.3.0/lib.rs:248:5
//   11: logsley::thread_scope
//              at src/lib.rs:179:5
//   12: opinion::main
//              at examples/opinion.rs:5:5
//   13: core::ops::function::FnOnce::call_once
//              at /Users/user/.rustup/toolchains/beta-x86_64-apple-darwin/lib/rustlib/src/rust/library/core/src/ops/function.rs:227:5
//   14: std::sys_common::backtrace::__rust_begin_short_backtrace
//              at /Users/user/.rustup/toolchains/beta-x86_64-apple-darwin/lib/rustlib/src/rust/library/std/src/sys_common/backtrace.rs:137:18
//   15: std::rt::lang_start::{{closure}}
//              at /Users/user/.rustup/toolchains/beta-x86_64-apple-darwin/lib/rustlib/src/rust/library/std/src/rt.rs:66:18
//   16: core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once
//              at /rustc/4c78178b1c6ee26e493edb58cefaa77ca44e3991/library/core/src/ops/function.rs:259:13
//       std::panicking::try::do_call
//              at /rustc/4c78178b1c6ee26e493edb58cefaa77ca44e3991/library/std/src/panicking.rs:381:40
//       std::panicking::try
//              at /rustc/4c78178b1c6ee26e493edb58cefaa77ca44e3991/library/std/src/panicking.rs:345:19
//       std::panic::catch_unwind
//              at /rustc/4c78178b1c6ee26e493edb58cefaa77ca44e3991/library/std/src/panic.rs:382:14
//       std::rt::lang_start_internal
//              at /rustc/4c78178b1c6ee26e493edb58cefaa77ca44e3991/library/std/src/rt.rs:51:25
//   17: std::rt::lang_start
//              at /Users/user/.rustup/toolchains/beta-x86_64-apple-darwin/lib/rustlib/src/rust/library/std/src/rt.rs:65:5
//   18: _main
// , thread: main

// The 'compact' format shows severity in color and prints scope variables on their own line.
// $ DEV_LOG_FORMAT=compact cargo run --package logsley --example opinion
// thread: main
//  2020-11-08T21:32:57.238-08:00 ERRO logsley error 1, x: 2
//  2020-11-08T21:32:57.239-08:00 WARN logsley warn 1, x: 2
//  2020-11-08T21:32:57.239-08:00 INFO logsley info 1, x: 2
//  2020-11-08T21:32:57.239-08:00 INFO log 1
// thread: thread1
//  2020-11-08T21:32:57.239-08:00 INFO logsley in thread 1, x: 2
//  2020-11-08T21:32:57.239-08:00 INFO log in thread 1
// thread: main
//  task: task1
//   2020-11-08T21:32:57.239-08:00 INFO logsley in task 1, x: 2
//   2020-11-08T21:32:57.239-08:00 INFO log in task 1
//  2020-11-08T21:32:58.132-08:00 ERRO thread 'main' panicked at 'uhoh': examples/opinion.rs:30
//    0: backtrace::backtrace::libunwind::trace
//              at /Users/user/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.54/src/backtrace/libunwind.rs:90:5
//       backtrace::backtrace::trace_unsynchronized
//              at /Users/user/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.54/src/backtrace/mod.rs:66:5
//    1: backtrace::backtrace::trace
//              at /Users/user/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.54/src/backtrace/mod.rs:53:14
//    2: backtrace::capture::Backtrace::create
//              at /Users/user/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.54/src/capture.rs:176:9
//    3: backtrace::capture::Backtrace::new
//              at /Users/user/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.54/src/capture.rs:140:22
//    4: log_panics::init::{{closure}}
//              at /Users/user/.cargo/registry/src/github.com-1ecc6299db9ec823/log-panics-2.0.0/src/lib.rs:52:25
//    5: std::panicking::rust_panic_with_hook
//              at /rustc/4c78178b1c6ee26e493edb58cefaa77ca44e3991/library/std/src/panicking.rs:581:17
//    6: std::panicking::begin_panic::{{closure}}
//              at /Users/user/.rustup/toolchains/beta-x86_64-apple-darwin/lib/rustlib/src/rust/library/std/src/panicking.rs:506:9
//    7: std::sys_common::backtrace::__rust_end_short_backtrace
//              at /Users/user/.rustup/toolchains/beta-x86_64-apple-darwin/lib/rustlib/src/rust/library/std/src/sys_common/backtrace.rs:153:18
//    8: std::panicking::begin_panic
//              at /Users/user/.rustup/toolchains/beta-x86_64-apple-darwin/lib/rustlib/src/rust/library/std/src/panicking.rs:505:12
//    9: opinion::main::{{closure}}
//              at examples/opinion.rs:30:9
//   10: slog_scope::scope
//              at /Users/user/.cargo/registry/src/github.com-1ecc6299db9ec823/slog-scope-4.3.0/lib.rs:248:5
//   11: logsley::thread_scope
//              at src/lib.rs:179:5
//   12: opinion::main
//              at examples/opinion.rs:5:5
//   13: core::ops::function::FnOnce::call_once
//              at /Users/user/.rustup/toolchains/beta-x86_64-apple-darwin/lib/rustlib/src/rust/library/core/src/ops/function.rs:227:5
//   14: std::sys_common::backtrace::__rust_begin_short_backtrace
//              at /Users/user/.rustup/toolchains/beta-x86_64-apple-darwin/lib/rustlib/src/rust/library/std/src/sys_common/backtrace.rs:137:18
//   15: std::rt::lang_start::{{closure}}
//              at /Users/user/.rustup/toolchains/beta-x86_64-apple-darwin/lib/rustlib/src/rust/library/std/src/rt.rs:66:18
//   16: core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once
//              at /rustc/4c78178b1c6ee26e493edb58cefaa77ca44e3991/library/core/src/ops/function.rs:259:13
//       std::panicking::try::do_call
//              at /rustc/4c78178b1c6ee26e493edb58cefaa77ca44e3991/library/std/src/panicking.rs:381:40
//       std::panicking::try
//              at /rustc/4c78178b1c6ee26e493edb58cefaa77ca44e3991/library/std/src/panicking.rs:345:19
//       std::panic::catch_unwind
//              at /rustc/4c78178b1c6ee26e493edb58cefaa77ca44e3991/library/std/src/panic.rs:382:14
//       std::rt::lang_start_internal
//              at /rustc/4c78178b1c6ee26e493edb58cefaa77ca44e3991/library/std/src/rt.rs:51:25
//   17: std::rt::lang_start
//              at /Users/user/.rustup/toolchains/beta-x86_64-apple-darwin/lib/rustlib/src/rust/library/std/src/rt.rs:65:5
//   18: _main