Skip to content

Wraps the log crate to allow for adding arbitrary information for logging.

Notifications You must be signed in to change notification settings

alex-gulyas/rs-scoped_log

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Scoped logger

Simple wrapper for the log crate that enables adding arbitrary information at runtime for future calls to the debugging macros.

That magic behind this is a thread_local RefCell<Vec<String>> which when populated will include the included identifiers, seperated with ": ".

#[macro_use] extern crate log;
#[macro_use] extern crate scoped_log;
extern crate env_logger;

fn main () {
    let _ = env_logger::init();

    scoped_info!("1");
    {
        push_log_scope!("outer-scope");
        scoped_info!("2: {}", "some args");
        if false { // Enable to test assert
            scoped_assert!(false);
            scoped_assert!(false, "I failed!");
        }
        push_log_scope!("inner-scope");
        scoped_info!(target: "some-target", "2: {}", "some args");
        Foo.foo();
    }
    scoped_info!("4");
}

#[derive(Debug)]
struct Foo;

impl Foo {
    fn foo(&self) {
        push_log_scope!("{:?}-scope", self);
        scoped_info!("3");
    }
}

Sample output from: cargo run --example example && RUST_LOG=example=trace target/debug/examples/example

     Running `target/debug/examples/example`
INFO:example: 1
INFO:example: outer-scope: 2: some args
INFO:example: outer-scope: inner-scope: Foo-scope: 3
INFO:example: 4

About

Wraps the log crate to allow for adding arbitrary information for logging.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Rust 100.0%