logged-stream

Crates.io Released API docs Master API docs Rust version License Workflow Status

Table of contents

Description

logged-stream is a Rust library that provides a LoggedStream structure which can be used as a wrapper for underlying IO object which implements std::io::Write and std::io::Read traits or their asynchronous analogues from tokio library to enable logging of all read and write operations, errors and drop.

LoggedStream structure constructs from four parts:

Usage

To use logged-stream, add the following line to your Cargo.toml:

toml [dependencies] logged-stream = "0.3"

or run the following Cargo command in your project directory:

$ cargo add logged-stream@0.3

Example

This is a simple usage example of LoggedStream structure with std::net::TcpStream as underling IO object which connects to some echo-server, lowercase hexadecimal formatter, default filter and console logger.

```rust fn main() { env::setvar("RUSTLOG", "debug"); env_logger::init();

let mut client = LoggedStream::new(
    net::TcpStream::connect("127.0.0.1:8080").unwrap(),
    LowercaseHexadecimalFormatter::new(None),
    DefaultFilter::default(),
    ConsoleLogger::new_unchecked("debug"),
);

let send = [0x01, 0x02, 0x03, 0x04];
client.write_all(&send).unwrap();
let mut response = [0u8; 4];
client.read_exact(&mut response).unwrap();

let send = [0x05, 0x06, 0x07, 0x08];
client.write_all(&send).unwrap();
let mut response = [0u8; 4];
client.read_exact(&mut response).unwrap();

let send = [0x09, 0x0a, 0x0b, 0x0c];
client.write_all(&send).unwrap();
let mut response = [0u8; 4];
client.read_exact(&mut response).unwrap();

let send = [0x01, 0x02, 0x03, 0x04];
client.write_all(&send).unwrap();
let mut response = [0u8; 4];
client.read_exact(&mut response).unwrap();

} ```

Output to console:

log [2023-04-18T08:18:45.895Z DEBUG logged_stream::logger] > 01:02:03:04 [2023-04-18T08:18:45.895Z DEBUG logged_stream::logger] < 01:02:03:04 [2023-04-18T08:18:45.895Z DEBUG logged_stream::logger] > 05:06:07:08 [2023-04-18T08:18:45.895Z DEBUG logged_stream::logger] < 05:06:07:08 [2023-04-18T08:18:45.895Z DEBUG logged_stream::logger] > 09:0a:0b:0c [2023-04-18T08:18:45.896Z DEBUG logged_stream::logger] < 09:0a:0b:0c [2023-04-18T08:18:45.896Z DEBUG logged_stream::logger] > 01:02:03:04 [2023-04-18T08:18:45.896Z DEBUG logged_stream::logger] < 01:02:03:04 [2023-04-18T08:18:45.896Z DEBUG logged_stream::logger] x Deallocated.

Full version of this example can be found there.

Same example, but rewritten using asynchronous API, can be found there.

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.