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:
parent
799d3b1575
commit
54f4d13350
|
@ -3505,6 +3505,8 @@ name = "solana-logger"
|
||||||
version = "0.18.0-pre1"
|
version = "0.18.0-pre1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"env_logger 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"env_logger 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
|
@ -328,6 +328,9 @@ pub trait RpcSol {
|
||||||
|
|
||||||
#[rpc(meta, name = "getVersion")]
|
#[rpc(meta, name = "getVersion")]
|
||||||
fn get_version(&self, _: Self::Metadata) -> Result<RpcVersionInfo>;
|
fn get_version(&self, _: Self::Metadata) -> Result<RpcVersionInfo>;
|
||||||
|
|
||||||
|
#[rpc(meta, name = "setLogFilter")]
|
||||||
|
fn set_log_filter(&self, _: Self::Metadata, _: String) -> Result<()>;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct RpcSolImpl;
|
pub struct RpcSolImpl;
|
||||||
|
@ -619,6 +622,11 @@ impl RpcSol for RpcSolImpl {
|
||||||
solana_core: VERSION.to_string(),
|
solana_core: VERSION.to_string(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn set_log_filter(&self, _: Self::Metadata, filter: String) -> Result<()> {
|
||||||
|
solana_logger::setup_with_filter(&filter);
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
|
|
@ -10,6 +10,8 @@ edition = "2018"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
env_logger = "0.6.2"
|
env_logger = "0.6.2"
|
||||||
|
lazy_static = "1.3.0"
|
||||||
|
log = "0.4.8"
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "solana_logger"
|
name = "solana_logger"
|
||||||
|
|
|
@ -1,19 +1,41 @@
|
||||||
//! The `logger` module provides a setup function for `env_logger`. Its only function,
|
//! The `logger` module configures `env_logger`
|
||||||
//! `setup()` may be called multiple times.
|
|
||||||
|
|
||||||
use env_logger;
|
use lazy_static::lazy_static;
|
||||||
use std::sync::Once;
|
use std::sync::{Arc, RwLock};
|
||||||
|
|
||||||
static INIT: Once = Once::new();
|
lazy_static! {
|
||||||
|
static ref LOGGER: Arc<RwLock<env_logger::Logger>> =
|
||||||
pub fn setup_with_filter(filter: &str) {
|
{ Arc::new(RwLock::new(env_logger::Logger::from_default_env())) };
|
||||||
INIT.call_once(|| {
|
|
||||||
env_logger::Builder::from_env(env_logger::Env::new().default_filter_or(filter))
|
|
||||||
.default_format_timestamp_nanos(true)
|
|
||||||
.init();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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() {
|
pub fn setup() {
|
||||||
setup_with_filter("error");
|
setup_with_filter("error");
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# Reconfigures the log filter on a validator using the current RUST_LOG value
|
||||||
|
#
|
||||||
|
|
||||||
|
if [[ -n $1 ]]; then
|
||||||
|
url=$1
|
||||||
|
else
|
||||||
|
# Default to the local node
|
||||||
|
url=http://127.0.0.1:8899
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -z $RUST_LOG ]]; then
|
||||||
|
echo "RUST_LOG not defined"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
set -x
|
||||||
|
exec curl $url -X POST -H "Content-Type: application/json" \
|
||||||
|
-d "
|
||||||
|
{
|
||||||
|
\"jsonrpc\": \"2.0\",
|
||||||
|
\"id\": 1,
|
||||||
|
\"method\": \"setLogFilter\",
|
||||||
|
\"params\": [\"$RUST_LOG\"]
|
||||||
|
}
|
||||||
|
"
|
Loading…
Reference in New Issue