logsley

This is an opinionated Rust logging library.

Features

Limitations

Examples

```rust // You should do logging like this.

let globalloggerguard = logsley::configure("info").unwrap(); logsley::threadscope("main", || { // Log named values: logsley::error!("err {}", 1; "x" => 2); // {"time_ns":1604899904064111000, // "time":"2020-11-08T21:31:44.064-08:00", // "module":"opinion","level":"ERROR", // "message":"err 1", // "thread":"main","x":2} logsley::warn!("warn {}", 1; "x" => 2); logsley::info!("info {}", 1; "x" => 2); logsley::debug!("debug {}", 1; "x" => 2); logsley::trace!("trace {}", 1; "x" => 2);

// Log simple messages: log::info!("log {}", 1); // {"time_ns":1604899904065070000, // "time":"2020-11-08T21:31:44.065-08:00", // "module":"opinion","level":"INFO", // "message":"log 1","thread":"main"}

std::thread::spawn(|| { logsley::threadscope("thread1", || { logsley::info!( "in thread {}", 1; "x" => 2); }) }) .join() .unwrap(); // {"timens":1604899904065111000, // "time":"2020-11-08T21:31:44.065-08:00", // "module":"opinion","level":"INFO", // "message":"in thread 1", // "thread":"thread1","x":2}

asyncstd::task::blockon( logsley::taskscope("task1", async move { logsley::info!( "logsley in task {}", 1; "x" => 2); })); // {"timens":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}

panic!("uhoh"); // {"timens":1604899904955593000, // "time":"2020-11-08T21:31:44.955-08:00", // "module":"logpanics","level":"ERROR", // "message":"thread 'main' panicked at 'uhoh': examples/opinion.rs:30\n // 0: backtrace::backtrace::libunwind::trace\n // at /.../backtrace-0.3.54/src/backtrace/libunwind.rs:90:5\n // backtrace::backtrace::traceunsynchronized\n // at /.../backtrace-0.3.54/src/backtrace/mod.rs:66:5\n // 1: backtrace::backtrace::trace\n // at /.../backtrace-0.3.54/src/backtrace/mod.rs:53:14\n // 2: backtrace::capture::Backtrace::create\n // at /.../backtrace-0.3.54/src/capture.rs:176:9\n // 3: backtrace::capture::Backtrace::new\n // at /.../backtrace-0.3.54/src/capture.rs:140:22\n // 4: logpanics::init::{{closure}}\n // at /.../log-panics-2.0.0/src/lib.rs:52:25\n // 5: std::panicking::rustpanicwithhook\n // at /.../library/std/src/panicking.rs:581:17\n // 6: std::panicking::beginpanic::{{closure}}\n // at /.../library/std/src/panicking.rs:506:9\n // 7: std::syscommon::backtrace::rustendshortbacktrace\n // at /.../library/std/src/syscommon/backtrace.rs:153:18\n // 8: std::panicking::beginpanic\n // at /.../library/std/src/panicking.rs:505:12\n // 9: opinion::main::{{closure}}\n // at examples/opinion.rs:30:9\n // 10: slogscope::scope\n // at /.../slog-scope-4.3.0/lib.rs:248:5\n // 11: logsley::threadscope\n // at src/lib.rs:179:5\n // 12: opinion::main\n // at examples/opinion.rs:5:5\n // 13: core::ops::function::FnOnce::callonce\n // at /.../library/core/src/ops/function.rs:227:5\n // 14: std::syscommon::backtrace::rustbeginshortbacktrace\n // at /.../library/std/src/syscommon/backtrace.rs:137:18\n // 15: std::rt::langstart::{{closure}}\n // at /.../library/std/src/rt.rs:66:18\n // 16: core::ops::function::impls:: for &F>::callonce\n // at /.../library/core/src/ops/function.rs:259:13\n // std::panicking::try::docall\n // at /.../library/std/src/panicking.rs:381:40\n // std::panicking::try\n // at /.../library/std/src/panicking.rs:345:19\n // std::panic::catchunwind\n // at /.../library/std/src/panic.rs:382:14\n // std::rt::langstartinternal\n // at /.../library/std/src/rt.rs:51:25\n // 17: std::rt::lang_start\n // at /.../library/std/src/rt.rs:65:5\n // 18: _main\n", // "thread":"main"} }); } ``` For a runnable example, see examples/opinion.rs.

Set the default log level to info. The program will emit log messages with level info and higher. rust let _global_logger_guard = logsley::configure("info"); log::error!("emitted"); log::warn!("emitted"); log::info!("emitted"); log::debug!("not emitted"); log::trace!("not emitted");

Set the default log level to info and set the level for chatty::module1 to warn. rust let _global_logger_guard = logsley::configure("info,chatty::module1=warn");

Use the environment variable to override default log level. module1 still gets its special log level. rust std::env::set_var("RUST_LOG", "debug"); let _global_logger_guard = logsley::configure("info,module1=warn");

Use the environment variable to set module1 to debug. rust std::env::set_var("RUST_LOG", "module1=debug"); let _global_logger_guard = logsley::configure("info");

Documentation

https://docs.rs/logsley

Alternatives

Release Process

  1. Edit Cargo.toml and bump version number.
  2. Run ./release.sh

Changelog

TODO

License: Apache-2.0