Validator log filter may now be reconfigured at runtime (#5473)
* Log filter may now be reconfigured at runtime * Add RPC API and bash script to reconfigure the log filter
This commit is contained in:
@ -1,19 +1,41 @@
|
||||
//! The `logger` module provides a setup function for `env_logger`. Its only function,
|
||||
//! `setup()` may be called multiple times.
|
||||
//! The `logger` module configures `env_logger`
|
||||
|
||||
use env_logger;
|
||||
use std::sync::Once;
|
||||
use lazy_static::lazy_static;
|
||||
use std::sync::{Arc, RwLock};
|
||||
|
||||
static INIT: Once = Once::new();
|
||||
|
||||
pub fn setup_with_filter(filter: &str) {
|
||||
INIT.call_once(|| {
|
||||
env_logger::Builder::from_env(env_logger::Env::new().default_filter_or(filter))
|
||||
.default_format_timestamp_nanos(true)
|
||||
.init();
|
||||
});
|
||||
lazy_static! {
|
||||
static ref LOGGER: Arc<RwLock<env_logger::Logger>> =
|
||||
{ Arc::new(RwLock::new(env_logger::Logger::from_default_env())) };
|
||||
}
|
||||
|
||||
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) {}
|
||||
}
|
||||
|
||||
// Configures logging with a specific filter.
|
||||
// May be called at any time to re-configure the log filter
|
||||
pub fn setup_with_filter(filter: &str) {
|
||||
let logger = env_logger::Builder::from_env(env_logger::Env::new().default_filter_or(filter))
|
||||
.default_format_timestamp_nanos(true)
|
||||
.build();
|
||||
let max_level = logger.filter();
|
||||
log::set_max_level(max_level);
|
||||
let mut rw = LOGGER.write().unwrap();
|
||||
std::mem::replace(&mut *rw, logger);
|
||||
let _ = log::set_boxed_logger(Box::new(LoggerShim {}));
|
||||
}
|
||||
|
||||
// Configures logging with the default filter ("error")
|
||||
pub fn setup() {
|
||||
setup_with_filter("error");
|
||||
}
|
||||
|
Reference in New Issue
Block a user