# here One of the oldest and still most commonly used debugging techniques looks something like this: ```rust // Do something println!("here"); // Do something else ``` Or if you're feeling real fancy: ```rust // Do something println!("here 1"); // Do something else println!("here 2"); // Do yet another thing ``` It's rather crude, but it's effective... as long as you can find where you put the print statements. Well, [`here`] is here to help! Usage is simple: ```rust here!(); // prints "filename:lineno" to stdout ``` What's that? You want to print to stderr instead of stdout? Then just use [`ehere`]. It's the same great taste as [`here`], but with stderr! Oh? So you've decided to use the wonderful `log` crate? Don't worry, we've got you covered there, too. With the optional `log` feature enabled, you get five new macros! One for each log level! ```rust here_trace!(); // log a trace message of "filename:lineno" here_debug!(); // log a debug message of "filename:lineno" here_info!(); // log a info message of "filename:lineno" here_warn!(); // log a warn message of "filename:lineno" here_error!(); // log a error message of "filename:lineno" ``` Huh? You want add more information? Don't worry we've got you covered. Each `here` macro can accept a format string and arguments just like the `format!` macro! ```rust here!("A message."); // prints "(filename:lineno): A message." here!("Something: 0x{:02x}", 16); // prints "(filename:lineno): Something: 0x0f" ``` License: MIT