add tokio console
This commit is contained in:
@@ -130,8 +130,20 @@ fn do_clap_matches(default_config_path: &OsStr) -> Result<clap::ArgMatches, clap
|
||||
.value_name("BOOTSTRAP_NODE_LIST")
|
||||
.help("Specify a list of bootstrap node dialinfos to use"),
|
||||
)
|
||||
.arg(
|
||||
Arg::new("panic")
|
||||
.long("panic")
|
||||
.help("panic on ctrl-c instead of graceful shutdown"),
|
||||
)
|
||||
;
|
||||
|
||||
#[cfg(feature = "rt-tokio")]
|
||||
let matches = matches.arg(
|
||||
Arg::new("console")
|
||||
.long("console")
|
||||
.help("enable tokio console"),
|
||||
);
|
||||
|
||||
#[cfg(debug_assertions)]
|
||||
let matches = matches.arg(
|
||||
Arg::new("wait-for-debug")
|
||||
@@ -288,6 +300,11 @@ pub fn process_command_line() -> EyreResult<(Settings, ArgMatches)> {
|
||||
};
|
||||
settingsrw.core.network.bootstrap_nodes = bootstrap_list;
|
||||
}
|
||||
|
||||
if matches.occurrences_of("console") != 0 {
|
||||
settingsrw.logging.console.enabled = true;
|
||||
}
|
||||
|
||||
drop(settingsrw);
|
||||
|
||||
// Set specific config settings
|
||||
|
@@ -91,8 +91,23 @@ fn main() -> EyreResult<()> {
|
||||
}
|
||||
|
||||
// --- Normal Startup ---
|
||||
let panic_on_shutdown = matches.occurrences_of("panic") != 0;
|
||||
ctrlc::set_handler(move || {
|
||||
shutdown();
|
||||
if panic_on_shutdown {
|
||||
let orig_hook = std::panic::take_hook();
|
||||
std::panic::set_hook(Box::new(move |panic_info| {
|
||||
// invoke the default handler and exit the process
|
||||
orig_hook(panic_info);
|
||||
|
||||
let backtrace = backtrace::Backtrace::new();
|
||||
eprintln!("Backtrace:\n{:?}", backtrace);
|
||||
|
||||
std::process::exit(1);
|
||||
}));
|
||||
panic!("panic requested");
|
||||
} else {
|
||||
shutdown();
|
||||
}
|
||||
})
|
||||
.expect("Error setting Ctrl-C handler");
|
||||
|
||||
|
@@ -41,6 +41,8 @@ logging:
|
||||
enabled: false
|
||||
level: 'trace'
|
||||
grpc_endpoint: 'localhost:4317'
|
||||
console:
|
||||
enabled: false
|
||||
testing:
|
||||
subnode_index: 0
|
||||
core:
|
||||
@@ -416,6 +418,11 @@ pub struct Terminal {
|
||||
pub level: LogLevel,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize, Serialize)]
|
||||
pub struct Console {
|
||||
pub enabled: bool,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize, Serialize)]
|
||||
pub struct File {
|
||||
pub enabled: bool,
|
||||
@@ -456,6 +463,7 @@ pub struct Logging {
|
||||
pub file: File,
|
||||
pub api: Api,
|
||||
pub otlp: Otlp,
|
||||
pub console: Console,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize, Serialize)]
|
||||
@@ -922,6 +930,7 @@ impl Settings {
|
||||
set_config_value!(inner.logging.otlp.enabled, value);
|
||||
set_config_value!(inner.logging.otlp.level, value);
|
||||
set_config_value!(inner.logging.otlp.grpc_endpoint, value);
|
||||
set_config_value!(inner.logging.console.enabled, value);
|
||||
set_config_value!(inner.testing.subnode_index, value);
|
||||
set_config_value!(inner.core.protected_store.allow_insecure_fallback, value);
|
||||
set_config_value!(
|
||||
@@ -1443,6 +1452,7 @@ mod tests {
|
||||
s.logging.otlp.grpc_endpoint,
|
||||
NamedSocketAddrs::from_str("localhost:4317").unwrap()
|
||||
);
|
||||
assert_eq!(s.logging.console.enabled, false);
|
||||
assert_eq!(s.testing.subnode_index, 0);
|
||||
|
||||
assert_eq!(
|
||||
|
@@ -1,6 +1,8 @@
|
||||
use crate::settings::*;
|
||||
use crate::*;
|
||||
use cfg_if::*;
|
||||
#[cfg(feature = "rt-tokio")]
|
||||
use console_subscriber::ConsoleLayer;
|
||||
use opentelemetry::sdk::*;
|
||||
use opentelemetry::*;
|
||||
use opentelemetry_otlp::WithExportConfig;
|
||||
@@ -36,6 +38,19 @@ impl VeilidLogs {
|
||||
// XXX:
|
||||
//layers.push(tracing_error::ErrorLayer::default().boxed());
|
||||
|
||||
#[cfg(feature = "rt-tokio")]
|
||||
if settingsr.logging.console.enabled {
|
||||
let layer = ConsoleLayer::builder()
|
||||
.with_default_env()
|
||||
.spawn()
|
||||
.with_filter(
|
||||
filter::Targets::new()
|
||||
.with_target("tokio", Level::TRACE)
|
||||
.with_target("runtime", Level::TRACE),
|
||||
);
|
||||
layers.push(layer.boxed());
|
||||
}
|
||||
|
||||
// Terminal logger
|
||||
if settingsr.logging.terminal.enabled {
|
||||
let filter = veilid_core::VeilidLayerFilter::new(
|
||||
|
Reference in New Issue
Block a user