2019-08-10 22:54:46 -07:00
|
|
|
//! The `logger` module configures `env_logger`
|
2018-06-06 17:36:54 -06:00
|
|
|
|
2019-08-10 22:54:46 -07:00
|
|
|
use lazy_static::lazy_static;
|
|
|
|
use std::sync::{Arc, RwLock};
|
2018-04-28 00:31:20 -07:00
|
|
|
|
2019-08-10 22:54:46 -07:00
|
|
|
lazy_static! {
|
|
|
|
static ref LOGGER: Arc<RwLock<env_logger::Logger>> =
|
2020-04-29 18:02:05 -07:00
|
|
|
Arc::new(RwLock::new(env_logger::Logger::from_default_env()));
|
2019-08-10 22:54:46 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
struct LoggerShim {}
|
|
|
|
|
|
|
|
impl log::Log for LoggerShim {
|
|
|
|
fn enabled(&self, metadata: &log::Metadata) -> bool {
|
|
|
|
LOGGER.read().unwrap().enabled(metadata)
|
|
|
|
}
|
|
|
|
|
|
|
|
fn log(&self, record: &log::Record) {
|
|
|
|
LOGGER.read().unwrap().log(record);
|
|
|
|
}
|
|
|
|
|
|
|
|
fn flush(&self) {}
|
|
|
|
}
|
2018-04-28 00:31:20 -07:00
|
|
|
|
2020-01-08 09:19:12 -08:00
|
|
|
fn replace_logger(logger: env_logger::Logger) {
|
2020-06-09 01:38:14 +01:00
|
|
|
log::set_max_level(logger.filter());
|
|
|
|
*LOGGER.write().unwrap() = logger;
|
2019-08-10 22:54:46 -07:00
|
|
|
let _ = log::set_boxed_logger(Box::new(LoggerShim {}));
|
2018-04-28 00:31:20 -07:00
|
|
|
}
|
2019-07-29 10:57:00 -07:00
|
|
|
|
2020-01-08 09:19:12 -08:00
|
|
|
// Configures logging with a specific filter overriding RUST_LOG. _RUST_LOG is used instead
|
|
|
|
// so if set it takes precedence.
|
|
|
|
// May be called at any time to re-configure the log filter
|
|
|
|
pub fn setup_with(filter: &str) {
|
|
|
|
let logger =
|
|
|
|
env_logger::Builder::from_env(env_logger::Env::new().filter_or("_RUST_LOG", filter))
|
|
|
|
.format_timestamp_nanos()
|
|
|
|
.build();
|
|
|
|
replace_logger(logger);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Configures logging with a default filter if RUST_LOG is not set
|
|
|
|
pub fn setup_with_default(filter: &str) {
|
|
|
|
let logger = env_logger::Builder::from_env(env_logger::Env::new().default_filter_or(filter))
|
|
|
|
.format_timestamp_nanos()
|
|
|
|
.build();
|
|
|
|
replace_logger(logger);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Configures logging with the default filter "error" if RUST_LOG is not set
|
2019-07-29 10:57:00 -07:00
|
|
|
pub fn setup() {
|
2020-01-08 09:19:12 -08:00
|
|
|
setup_with_default("error");
|
2019-07-29 10:57:00 -07:00
|
|
|
}
|