log-ndccrate provides a logger which wraps arbitrary logger which prepends thread-local information to each log messagelog-ndc-env-loggeris a very simple (10 lines of code) drop-in wrapper/replacement ofenv_loggercrate
This crate allows settings a thread-local variable which will be prepended to log messages.
log_ndc::set_boxed_logger(logger) wraps passed logger object with log_ndc::Logger and calls
underlying log::set_boxed_logger(..).
log_ndc functions like log_ndc::set(..) or log_ndc::push(..) replace thread-local text
which is later prepended to log messages in the wrapper logger.
// works exactly like regular `warn!` macro with any logger
// `warn!` is a macro from `log` library
warn!("something happened");
// set thread-local information like request id
log_ndc::set(format!("reqid={}", 10));
info!("starting request");
// outputs
// INFO 2019-02-03T23:51:26Z: mycrate: [reqid=10] starting request
Drop-in replacement/wrapper of env_logger crate.
It simply initialzes env_logger wrapper and wraps it with log_ndc::Logger.
The crate is dead simple, have a look at single file source.
(I think these are FAQ, however nobody asked me anything yet.)
The word "NDC" is taken from log4j, it means "nested dianostics context".
Yes, log-ndc wraps logging backend and delegates it to log crate.
So all macros like warn!(..) should work as before.
- log-mdc is a similar project, which allows storing thread-local
data by key. However, log-mdc is compatible only with certain loggers like
log4rs. It is not possible to obtain thread-local information set in
log-mdcin when e. g.env-loggeris used.
I think it would be right thing if log crate supported basic
thread-local context like provided in this crate.