From c077ee73585d0b3eec3b3308edead344a3f6f39c Mon Sep 17 00:00:00 2001 From: Luca Joss <43531661+ljoss17@users.noreply.github.com> Date: Tue, 12 Sep 2023 16:39:00 +0200 Subject: [PATCH] Add support for changing `tracing` directives at runtime (#3565) * Add handler to update tracing filter * Add documentation for 'hermes logs' commands * Add documentation regarding ZMQ interaction in guide * Add comments * Rename 'logs' subcommands * Remove unnecessary error * Fix config example * Use TCP client/server instead of ZMQ * Cleanup * Only start tracing server for `start` command * Show message returned by server when setting log level * Fix for server hanging * Add changelog entry --------- Co-authored-by: Romain Ruetschi <106849+romac@users.noreply.github.com> --- .../ibc-relayer-cli/3564-tracing-filter.md | 5 ++ config.toml | 9 +++ crates/relayer-cli/Cargo.toml | 1 - crates/relayer-cli/src/application.rs | 40 ++++++++++++- crates/relayer-cli/src/commands.rs | 7 ++- crates/relayer-cli/src/commands/logs.rs | 20 +++++++ .../src/commands/logs/log_level.rs | 60 +++++++++++++++++++ crates/relayer-cli/src/commands/logs/raw.rs | 45 ++++++++++++++ crates/relayer-cli/src/commands/logs/reset.rs | 36 +++++++++++ crates/relayer-cli/src/components.rs | 26 +++++++- crates/relayer-cli/src/lib.rs | 1 + crates/relayer-cli/src/tracing_handle.rs | 49 +++++++++++++++ crates/relayer/src/config.rs | 17 ++++++ guide/src/SUMMARY.md | 1 + .../src/advanced/troubleshooting/log-level.md | 55 +++++++++++++++++ .../src/documentation/commands/logs/index.md | 23 +++++++ .../templates/commands/hermes/logs/reset_1.md | 1 + .../commands/hermes/logs/set-log-level_1.md | 1 + .../commands/hermes/logs/set-raw-filter_1.md | 1 + guide/src/templates/commands/hermes/logs_1.md | 1 + guide/src/templates/help_templates/help.md | 1 + guide/src/templates/help_templates/logs.md | 15 +++++ .../templates/help_templates/logs/reset.md | 8 +++ .../help_templates/logs/set-log-level.md | 14 +++++ .../help_templates/logs/set-raw-filter.md | 9 +++ 25 files changed, 440 insertions(+), 6 deletions(-) create mode 100644 .changelog/unreleased/features/ibc-relayer-cli/3564-tracing-filter.md create mode 100644 crates/relayer-cli/src/commands/logs.rs create mode 100644 crates/relayer-cli/src/commands/logs/log_level.rs create mode 100644 crates/relayer-cli/src/commands/logs/raw.rs create mode 100644 crates/relayer-cli/src/commands/logs/reset.rs create mode 100644 crates/relayer-cli/src/tracing_handle.rs create mode 100644 guide/src/documentation/commands/logs/index.md create mode 100644 guide/src/templates/commands/hermes/logs/reset_1.md create mode 100644 guide/src/templates/commands/hermes/logs/set-log-level_1.md create mode 100644 guide/src/templates/commands/hermes/logs/set-raw-filter_1.md create mode 100644 guide/src/templates/commands/hermes/logs_1.md create mode 100644 guide/src/templates/help_templates/logs.md create mode 100644 guide/src/templates/help_templates/logs/reset.md create mode 100644 guide/src/templates/help_templates/logs/set-log-level.md create mode 100644 guide/src/templates/help_templates/logs/set-raw-filter.md diff --git a/.changelog/unreleased/features/ibc-relayer-cli/3564-tracing-filter.md b/.changelog/unreleased/features/ibc-relayer-cli/3564-tracing-filter.md new file mode 100644 index 0000000000..5bf9bf588c --- /dev/null +++ b/.changelog/unreleased/features/ibc-relayer-cli/3564-tracing-filter.md @@ -0,0 +1,5 @@ +- Add support for changing `tracing` directives at runtime. + Please see the [corresponding page in the Hermes guide][tracing-guide] for more information. + ([\#3564](https://github.com/informalsystems/hermes/issues/3564)) + +[tracing-guide]: https://hermes.informal.systems/advanced/troubleshooting/log-level.html diff --git a/config.toml b/config.toml index 036c36bc0c..ce371027e6 100644 --- a/config.toml +++ b/config.toml @@ -123,6 +123,15 @@ port = 3001 # [1000, 3900, 6800, 9700, 12600, 15500, 18400, 21300, 24200, 27100, 30000] # latency_confirmed = { start = 1000, end = 30000, buckets = 10 } +# The tracing server section defines parameters for Hermes' server allowing updates to the tracing directives. +# +# https://hermes.informal.systems/advanced/troubleshooting/log-level.html#overriding-the-tracing-filter-during-runtime +[tracing_server] +# Whether or not to enable the tracing server. Default: false +enabled = false + +# Specify the port over which the built-in TCP server will serve the directives. Default: 5555 +port = 5555 # A chains section includes parameters related to a chain and the full node to which # the relayer can send transactions and queries. diff --git a/crates/relayer-cli/Cargo.toml b/crates/relayer-cli/Cargo.toml index e3cd1ebc3b..4bf394526d 100644 --- a/crates/relayer-cli/Cargo.toml +++ b/crates/relayer-cli/Cargo.toml @@ -55,7 +55,6 @@ tokio = { version = "1.0", features = ["full"] } tracing = "0.1.36" tracing-subscriber = { version = "0.3.14", features = ["fmt", "env-filter", "json"]} time = "0.3" - [dependencies.tendermint] version = "0.33.0" features = ["secp256k1"] diff --git a/crates/relayer-cli/src/application.rs b/crates/relayer-cli/src/application.rs index b2bca10c0a..1dadc513e7 100644 --- a/crates/relayer-cli/src/application.rs +++ b/crates/relayer-cli/src/application.rs @@ -1,6 +1,6 @@ //! Definition of the application, based on the Abscissa framework -use std::path::PathBuf; +use std::{path::PathBuf, thread}; use abscissa_core::{ application::{self, AppCell}, @@ -10,12 +10,17 @@ use abscissa_core::{ terminal::ColorChoice, Application, Configurable, FrameworkError, FrameworkErrorKind, StandardPaths, }; -use ibc_relayer::{config::Config, util::debug_section::DebugSection}; +use ibc_relayer::{ + config::{Config, TracingServerConfig}, + util::debug_section::DebugSection, +}; use crate::{ + commands::CliCmd, components::{JsonTracing, PrettyTracing}, config::validate_config, entry::EntryPoint, + tracing_handle::{spawn_reload_handler, ReloadHandle}, }; /// Application state @@ -195,13 +200,24 @@ impl Application for CliApp { let enable_json = self.debug_enabled(DebugSection::ProfilingJson); ibc_relayer::util::profiling::enable(enable_console, enable_json); + let is_start_cmd = command + .command + .as_ref() + .map_or(false, |cmd| matches!(cmd, CliCmd::Start(_))); + if command.json { // Enable JSON by using the crate-level `Tracing` let tracing = JsonTracing::new(config.global, &self.debug_sections)?; Ok(vec![Box::new(terminal), Box::new(tracing)]) } else { // Use abscissa's tracing, which pretty-prints to the terminal obeying log levels - let tracing = PrettyTracing::new(config.global, &self.debug_sections)?; + let (tracing, reload_handle) = + PrettyTracing::new_with_reload_handle(config.global, &self.debug_sections)?; + + if is_start_cmd { + spawn_tracing_reload_server(reload_handle, config.tracing_server.clone()); + } + Ok(vec![Box::new(terminal), Box::new(tracing)]) } } @@ -212,3 +228,21 @@ impl Application for CliApp { ColorChoice::Never } } + +fn spawn_tracing_reload_server( + reload_handle: ReloadHandle, + config: TracingServerConfig, +) { + thread::spawn(move || { + let rt = tokio::runtime::Builder::new_current_thread() + .enable_all() + .build() + .unwrap(); + + let result = rt.block_on(spawn_reload_handler(reload_handle, config)); + + if let Err(e) = result { + eprintln!("ERROR: failed to spawn tracing reload handler: {e}"); + } + }); +} diff --git a/crates/relayer-cli/src/commands.rs b/crates/relayer-cli/src/commands.rs index fd1b9fb1b5..51e7022bd6 100644 --- a/crates/relayer-cli/src/commands.rs +++ b/crates/relayer-cli/src/commands.rs @@ -8,6 +8,7 @@ mod fee; mod health; mod keys; mod listen; +mod logs; mod misbehaviour; mod query; mod start; @@ -18,7 +19,7 @@ mod version; use self::{ clear::ClearCmds, completions::CompletionsCmd, config::ConfigCmd, create::CreateCmds, - fee::FeeCmd, health::HealthCheckCmd, keys::KeysCmd, listen::ListenCmd, + fee::FeeCmd, health::HealthCheckCmd, keys::KeysCmd, listen::ListenCmd, logs::LogsCmd, misbehaviour::MisbehaviourCmd, query::QueryCmd, start::StartCmd, tx::TxCmd, update::UpdateCmds, upgrade::UpgradeCmds, version::VersionCmd, }; @@ -85,6 +86,10 @@ pub enum CliCmd { /// Listen to and display IBC events emitted by a chain Listen(ListenCmd), + /// Update tracing log directives + #[clap(subcommand)] + Logs(LogsCmd), + /// Listen to client update IBC events and handles misbehaviour Misbehaviour(MisbehaviourCmd), diff --git a/crates/relayer-cli/src/commands/logs.rs b/crates/relayer-cli/src/commands/logs.rs new file mode 100644 index 0000000000..2a55b2a8f1 --- /dev/null +++ b/crates/relayer-cli/src/commands/logs.rs @@ -0,0 +1,20 @@ +use abscissa_core::clap::Parser; +use abscissa_core::Command; +use abscissa_core::Runnable; + +pub mod log_level; +pub mod raw; +pub mod reset; + +/// `logs` subcommand +#[derive(Command, Debug, Parser, Runnable)] +pub enum LogsCmd { + /// Subcommand used to easily update the lowest log level displayed + SetLogLevel(log_level::SetLogLevelCmd), + + /// Subcommand used to send a raw filter directive for logs displayed + SetRawFilter(raw::SetRawFilterCmd), + + /// Subcommand to restore the log level by using the configuration defined in the config.toml file + Reset(reset::ResetCmd), +} diff --git a/crates/relayer-cli/src/commands/logs/log_level.rs b/crates/relayer-cli/src/commands/logs/log_level.rs new file mode 100644 index 0000000000..51d349bfd1 --- /dev/null +++ b/crates/relayer-cli/src/commands/logs/log_level.rs @@ -0,0 +1,60 @@ +use abscissa_core::clap::Parser; +use abscissa_core::Command; +use abscissa_core::Runnable; +use tracing::info; +use tracing::Level; + +use crate::prelude::app_config; +use crate::tracing_handle::send_command; + +#[derive(Clone, Command, Debug, Parser, PartialEq, Eq)] +pub struct SetLogLevelCmd { + #[clap( + long = "log-level", + required = true, + value_name = "LOG_LEVEL", + help = "The new lowest log level which will be displayed. Possible values are `trace`, `debug`, `info`, `warn` or `error`" + )] + log_level: Level, + + #[clap( + long = "log-filter", + help_heading = "FLAGS", + value_name = "LOG_FILTER", + help = "The target of the log level to update, if left empty all the targets will be updated. Example `ibc` or `tendermint_rpc`" + )] + log_filter: Option, +} + +impl Runnable for SetLogLevelCmd { + fn run(&self) { + let rt = tokio::runtime::Builder::new_current_thread() + .enable_all() + .build() + .unwrap(); + + rt.block_on(run(&self.log_level, self.log_filter.as_ref())); + } +} + +async fn run(log_level: &Level, log_filter: Option<&String>) { + let config = app_config(); + + let port = config.tracing_server.port; + + let str_log = log_level.to_string(); + + let result = if let Some(log_filter) = log_filter { + let log_cmd = format!("{log_filter}={str_log}"); + info!("Setting log level to: {log_cmd}"); + send_command(&log_cmd, port).await + } else { + info!("Setting log level to: {str_log}"); + send_command(&str_log, port).await + }; + + match result { + Ok(msg) => info!("{msg}"), + Err(e) => info!("Failed to set log level: {e}"), + } +} diff --git a/crates/relayer-cli/src/commands/logs/raw.rs b/crates/relayer-cli/src/commands/logs/raw.rs new file mode 100644 index 0000000000..6c680e0c9b --- /dev/null +++ b/crates/relayer-cli/src/commands/logs/raw.rs @@ -0,0 +1,45 @@ +use abscissa_core::clap::Parser; +use abscissa_core::Command; +use abscissa_core::Runnable; +use tracing::error; +use tracing::info; + +use crate::prelude::app_config; +use crate::tracing_handle::send_command; + +// TODO `hermes set-raw-filter` +#[derive(Clone, Command, Debug, Parser, PartialEq, Eq)] +pub struct SetRawFilterCmd { + #[clap( + long = "raw-filter", + required = true, + value_name = "RAW_FILTER", + help = "Raw filter used as new tracing directive. Use with caution" + )] + raw_filter: String, +} + +impl Runnable for SetRawFilterCmd { + fn run(&self) { + let config = app_config(); + + let rt = tokio::runtime::Builder::new_current_thread() + .enable_all() + .build() + .unwrap(); + + let port = config.tracing_server.port; + + rt.block_on(run(&self.raw_filter, port)); + } +} + +async fn run(raw_filter: &str, port: u16) { + info!("Setting raw log filter to: {raw_filter}"); + let result = send_command(raw_filter, port).await; + + match result { + Ok(_) => info!("Successfully set raw filter"), + Err(e) => error!("Failed to set raw filter: {e}"), + } +} diff --git a/crates/relayer-cli/src/commands/logs/reset.rs b/crates/relayer-cli/src/commands/logs/reset.rs new file mode 100644 index 0000000000..e216af3c32 --- /dev/null +++ b/crates/relayer-cli/src/commands/logs/reset.rs @@ -0,0 +1,36 @@ +use abscissa_core::clap::Parser; +use abscissa_core::Command; +use abscissa_core::Runnable; + +use crate::components::default_directive; +use crate::prelude::*; +use crate::tracing_handle::send_command; + +#[derive(Clone, Command, Debug, Parser, PartialEq, Eq)] +pub struct ResetCmd {} + +impl Runnable for ResetCmd { + fn run(&self) { + let config = app_config(); + + let rt = tokio::runtime::Builder::new_current_thread() + .enable_all() + .build() + .unwrap(); + + let port = config.tracing_server.port; + let directive = default_directive(config.global.log_level); + + rt.block_on(run(&directive, port)); + } +} + +async fn run(directive: &str, port: u16) { + info!("Resetting log filter to: {directive}"); + let result = send_command(directive, port).await; + + match result { + Ok(_) => info!("Successfully reset log filter"), + Err(e) => error!("Failed to reset log filter: {e}"), + } +} diff --git a/crates/relayer-cli/src/components.rs b/crates/relayer-cli/src/components.rs index eef6389c3e..ba46f7ffd2 100644 --- a/crates/relayer-cli/src/components.rs +++ b/crates/relayer-cli/src/components.rs @@ -9,6 +9,7 @@ use ibc_relayer::{ }; use crate::config::Error; +use crate::tracing_handle::ReloadHandle; /// The name of the environment variable through which one can override /// the tracing filter built in [`build_tracing_filter`]. @@ -74,6 +75,29 @@ impl PrettyTracing { Ok(Self) } + + pub fn new_with_reload_handle( + cfg: GlobalConfig, + debug_sections: &[DebugSection], + ) -> Result<(Self, ReloadHandle), FrameworkError> { + let filter = build_tracing_filter(cfg.log_level, debug_sections)?; + + // Construct a tracing subscriber with the supplied filter and enable reloading. + let builder = FmtSubscriber::builder() + .with_target(false) + .with_env_filter(filter) + .with_writer(std::io::stderr) + .with_ansi(enable_ansi()) + .with_thread_ids(true) + .with_filter_reloading(); + + let reload_handle = builder.reload_handle(); + + let subscriber = builder.finish(); + subscriber.init(); + + Ok((Self, reload_handle)) + } } /// Check if both stdout and stderr are proper terminal (tty), @@ -90,7 +114,7 @@ const TARGET_CRATES: [&str; 2] = ["ibc_relayer", "ibc_relayer_cli"]; /// Build a tracing directive setting the log level for the relayer crates to the /// given `log_level`. -fn default_directive(log_level: LogLevel) -> String { +pub fn default_directive(log_level: LogLevel) -> String { use itertools::Itertools; TARGET_CRATES diff --git a/crates/relayer-cli/src/lib.rs b/crates/relayer-cli/src/lib.rs index 428e79f7a9..ff28651be7 100644 --- a/crates/relayer-cli/src/lib.rs +++ b/crates/relayer-cli/src/lib.rs @@ -33,6 +33,7 @@ pub mod config; pub mod entry; pub mod error; pub mod prelude; +pub mod tracing_handle; /// The path to the default configuration file, relative to the home directory. pub const DEFAULT_CONFIG_PATH: &str = ".hermes/config.toml"; diff --git a/crates/relayer-cli/src/tracing_handle.rs b/crates/relayer-cli/src/tracing_handle.rs new file mode 100644 index 0000000000..aa70af4294 --- /dev/null +++ b/crates/relayer-cli/src/tracing_handle.rs @@ -0,0 +1,49 @@ +use std::io; + +use tokio::io::{AsyncBufReadExt, AsyncReadExt, AsyncWriteExt, BufReader}; +use tokio::net::TcpListener; +use tokio::net::TcpStream; +use tracing_subscriber::filter; +use tracing_subscriber::reload::Handle; + +use ibc_relayer::config::TracingServerConfig; + +pub type ReloadHandle = Handle; + +pub async fn spawn_reload_handler( + reload_handle: ReloadHandle, + config: TracingServerConfig, +) -> io::Result<()> { + if !config.enabled { + return Ok(()); + } + + let listener = TcpListener::bind(("0.0.0.0", config.port)).await?; + + loop { + let (socket, _) = listener.accept().await?; + let mut reader = BufReader::new(socket); + + let mut buffer = String::new(); + reader.read_line(&mut buffer).await?; + + let mut socket = reader.into_inner(); + + let cmd = buffer.trim_end(); + let _ = reload_handle.reload(filter::EnvFilter::new(cmd)); + let success_msg = format!("Successfully set tracing filter to `{}`", cmd); + socket.write_all(success_msg.as_bytes()).await?; + } +} + +pub async fn send_command(cmd: &str, port: u16) -> io::Result { + let mut stream = TcpStream::connect(("127.0.0.1", port)).await?; + + stream.write_all(cmd.as_bytes()).await?; + stream.write_all(b"\n").await?; + + let mut buffer = String::new(); + stream.read_to_string(&mut buffer).await?; + + Ok(buffer) +} diff --git a/crates/relayer/src/config.rs b/crates/relayer/src/config.rs index 92fe601cbf..8fe656dcb3 100644 --- a/crates/relayer/src/config.rs +++ b/crates/relayer/src/config.rs @@ -240,6 +240,8 @@ pub struct Config { pub telemetry: TelemetryConfig, #[serde(default = "Vec::new", skip_serializing_if = "Vec::is_empty")] pub chains: Vec, + #[serde(default)] + pub tracing_server: TracingServerConfig, } impl Config { @@ -693,6 +695,21 @@ pub(crate) fn store_writer(config: &Config, mut writer: impl Write) -> Result<() Ok(()) } +#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)] +pub struct TracingServerConfig { + pub enabled: bool, + pub port: u16, +} + +impl Default for TracingServerConfig { + fn default() -> Self { + Self { + enabled: false, + port: 5555, + } + } +} + #[cfg(test)] mod tests { use core::str::FromStr; diff --git a/guide/src/SUMMARY.md b/guide/src/SUMMARY.md index c326173fbf..3264a2214f 100644 --- a/guide/src/SUMMARY.md +++ b/guide/src/SUMMARY.md @@ -87,6 +87,7 @@ - [Register Counterparty Payee](./documentation/commands/fee/register-counterparty-payee.md) - [Register Payee](./documentation/commands/fee/register-payee.md) - [Transfer](./documentation/commands/fee/transfer.md) + - [Logs](./documentation/commands/logs/index.md) - [Glossary](./glossary.md) --- diff --git a/guide/src/advanced/troubleshooting/log-level.md b/guide/src/advanced/troubleshooting/log-level.md index 4ad3c09748..b1294cc918 100644 --- a/guide/src/advanced/troubleshooting/log-level.md +++ b/guide/src/advanced/troubleshooting/log-level.md @@ -105,3 +105,58 @@ use the `info` log level. The two DEBUG log lines above were emitted by the `tendermint-rpc` crate. + +## Overriding the tracing filter during Runtime + +If you have the `tracing_server` enabled: + +```toml +[tracing_server] +enabled = true +port = 5555 +``` + +You can update the tracing filter without restarting your instance. There are two commands allowing you to do so, the first is safer but more limited while the second is more complete it is harder to use. + +### Limited command + +If possible use the [log-level](../../../documentation/commands/logs/index.md#log-level) command as the results are guaranteed. + +__Examples__ + +The following command is equivalent to running the Hermes instance with `RUST_LOG=ibc=debug hermes start`: + + ```shell + {{#template ../../templates/commands/hermes/logs/set-log-level_1.md LOG_LEVEL=debug OPTIONS= --log-filter ibc}} + ``` + + It is also possible to only change the `tendermint_rpc` log level: + + ```shell + {{#template ../../templates/commands/hermes/logs/set-log-level_1.md LOG_LEVEL=debug OPTIONS= --log-filter tendermint_rpc}} + ``` + + If the `--log-filter` is not specified, the log level will be set for all targets. + + ### Raw command + + The raw command is much more powerful but harder to use. This will send the directive you want to tracing, allowing you to specify more precise filters. + +> __NOTE__: Use with caution as this might end up hiding important logs. + +__Example__ + +The following command will only display logs which have a field `channel=channel-1` by setting the `` to `"[{channel=channel-1}]"`: + + ```shell + {{#template ../../templates/commands/hermes/logs/set-raw-filter_1.md RAW_FILTER=}} + ``` + + ### Reset command + + This command allows you to easily restore the log level using the level configured in `config.toml`. This would be equivalent to starting the Hermes instance with `hermes start`. + + ```shell + {{#template ../../templates/commands/hermes/logs/reset_1.md}} + ``` + diff --git a/guide/src/documentation/commands/logs/index.md b/guide/src/documentation/commands/logs/index.md new file mode 100644 index 0000000000..cb94477a5c --- /dev/null +++ b/guide/src/documentation/commands/logs/index.md @@ -0,0 +1,23 @@ +## Set Log Level + +This command allows you to easily update the lowest log level displayed by Hermes. + +```shell +{{#include ../../../templates/help_templates/logs/log-level.md}} +``` + +## Set Raw Filter + +This command allows you to update the tracing directive used to filter the logs. Please use this command with caution as it requires a precise syntaxe. + +```shell +{{#include ../../../templates/help_templates/logs/raw.md}} +``` + +## Reset + +This command will restore the lowest log level displayed using the `log_level` defined in the `config.toml`. + +```shell +{{#include ../../../templates/help_templates/logs/reset.md}} +``` \ No newline at end of file diff --git a/guide/src/templates/commands/hermes/logs/reset_1.md b/guide/src/templates/commands/hermes/logs/reset_1.md new file mode 100644 index 0000000000..f5ab35bf6d --- /dev/null +++ b/guide/src/templates/commands/hermes/logs/reset_1.md @@ -0,0 +1 @@ +[[#BINARY hermes]][[#GLOBALOPTIONS]] logs reset \ No newline at end of file diff --git a/guide/src/templates/commands/hermes/logs/set-log-level_1.md b/guide/src/templates/commands/hermes/logs/set-log-level_1.md new file mode 100644 index 0000000000..5485b576de --- /dev/null +++ b/guide/src/templates/commands/hermes/logs/set-log-level_1.md @@ -0,0 +1 @@ +[[#BINARY hermes]][[#GLOBALOPTIONS]] logs set-log-level[[#OPTIONS]] --log-level [[#LOG_LEVEL]] \ No newline at end of file diff --git a/guide/src/templates/commands/hermes/logs/set-raw-filter_1.md b/guide/src/templates/commands/hermes/logs/set-raw-filter_1.md new file mode 100644 index 0000000000..eeabc079e5 --- /dev/null +++ b/guide/src/templates/commands/hermes/logs/set-raw-filter_1.md @@ -0,0 +1 @@ +[[#BINARY hermes]][[#GLOBALOPTIONS]] logs set-raw-filter --raw-filter [[#RAW_FILTER]] \ No newline at end of file diff --git a/guide/src/templates/commands/hermes/logs_1.md b/guide/src/templates/commands/hermes/logs_1.md new file mode 100644 index 0000000000..fd983789c1 --- /dev/null +++ b/guide/src/templates/commands/hermes/logs_1.md @@ -0,0 +1 @@ +[[#BINARY hermes]][[#GLOBALOPTIONS]] logs [[#SUBCOMMAND]] \ No newline at end of file diff --git a/guide/src/templates/help_templates/help.md b/guide/src/templates/help_templates/help.md index c1f59f2e16..11aa32e2af 100644 --- a/guide/src/templates/help_templates/help.md +++ b/guide/src/templates/help_templates/help.md @@ -22,6 +22,7 @@ SUBCOMMANDS: help Print this message or the help of the given subcommand(s) keys Manage keys in the relayer for each chain listen Listen to and display IBC events emitted by a chain + logs Update tracing log directives misbehaviour Listen to client update IBC events and handles misbehaviour query Query objects from the chain start Start the relayer in multi-chain mode diff --git a/guide/src/templates/help_templates/logs.md b/guide/src/templates/help_templates/logs.md new file mode 100644 index 0000000000..632c623449 --- /dev/null +++ b/guide/src/templates/help_templates/logs.md @@ -0,0 +1,15 @@ +DESCRIPTION: +Update tracing log directives + +USAGE: + hermes logs + +OPTIONS: + -h, --help Print help information + +SUBCOMMANDS: + help Print this message or the help of the given subcommand(s) + reset Subcommand to restore the log level by using the configuration defined in + the config.toml file + set-log-level Subcommand used to easily update the lowest log level displayed + set-raw-filter Subcommand used to send a raw filter directive for logs displayed diff --git a/guide/src/templates/help_templates/logs/reset.md b/guide/src/templates/help_templates/logs/reset.md new file mode 100644 index 0000000000..ff4e8b3e70 --- /dev/null +++ b/guide/src/templates/help_templates/logs/reset.md @@ -0,0 +1,8 @@ +DESCRIPTION: +Subcommand to restore the log level by using the configuration defined in the config.toml file + +USAGE: + hermes logs reset + +OPTIONS: + -h, --help Print help information diff --git a/guide/src/templates/help_templates/logs/set-log-level.md b/guide/src/templates/help_templates/logs/set-log-level.md new file mode 100644 index 0000000000..13aa7450fb --- /dev/null +++ b/guide/src/templates/help_templates/logs/set-log-level.md @@ -0,0 +1,14 @@ +DESCRIPTION: +Subcommand used to easily update the lowest log level displayed + +USAGE: + hermes logs set-log-level [OPTIONS] --log-level + +OPTIONS: + -h, --help Print help information + --log-level The new lowest log level which will be displayed. Possible values + are `trace`, `debug`, `info`, `warn` or `error` + +FLAGS: + --log-filter The target of the log level to update, if left empty all the + targets will be updated. Example `ibc` or `tendermint_rpc` diff --git a/guide/src/templates/help_templates/logs/set-raw-filter.md b/guide/src/templates/help_templates/logs/set-raw-filter.md new file mode 100644 index 0000000000..e65a60bc78 --- /dev/null +++ b/guide/src/templates/help_templates/logs/set-raw-filter.md @@ -0,0 +1,9 @@ +DESCRIPTION: +Subcommand used to send a raw filter directive for logs displayed + +USAGE: + hermes logs set-raw-filter --raw-filter + +OPTIONS: + -h, --help Print help information + --raw-filter Raw filter used as new tracing directive. Use with caution