slog_derive

Crates.ioslog_derive
lib.rsslog_derive
version0.2.0
sourcesrc
created_at2018-02-14 12:42:52.767
updated_at2019-10-12 08:16:36.247087
descriptionCustom derives for use with slog.
homepage
repositoryhttps://github.com/slog-rs/derive
max_upload_size
id51133
size15,088
rust-devs (github:intility:rust-devs)

documentation

https://docs.rs/slog_derive

README

Slog Derives

Build Status Crates.io Link Online Documentation

Custom derives for use with slog logging.

The KV Derive

Sometimes you'll want to log the struct's contents in your application, for example when you've just started and want to record the configuration details for debugging purposes. Usually you'd need to do something like this:

#[macro_use]
extern crate slog;
use std::path::PathBuf;

struct Config {
    width: f64,
    height: f64,
    url: String,
}

let cfg = Config { ... };

debug!(logger, "Loaded Config";
    "width" => cfg.width,
    "height" => cfg.height,
    "url" => cfg.url);
# }

This is where the KV trait comes in. Implementing it lets you log a type as a bunch of key-value pairs, translating the previous log statement into something like this:

debug!(logger, "Loaded Config"; cfg);

This crate provides a custom derive which will implement KV for you. It'll just iterate over each field in your struct and invoke Value::serialize() on each. You can also use the #[slog(skip)] attribute to skip specific fields.

#[derive(KV)]
pub struct Config {
  width: f64,
  height: f64,
  #[slog(skip)]
  url: String,
}

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Commit count: 27

cargo fmt