Parametrize the log level
This section explains how to parametrize the log output level of hermes
.
The configuration file permits parametrization of output verbosity via the knob called log_level
.
This file is loaded by default from $HOME/.hermes/config.toml
, but can be overridden in all commands
with the --config
flag, e.g. hermes --config $CONFIGPATH subcommand
.
Relevant snippet:
[global]
log_level = 'error'
Valid options for log_level
are: 'error', 'warn', 'info', 'debug', 'trace'.
These levels correspond to the tracing subcomponent of the relayer-cli,
see here.
Hermes will always print a last line summarizing the result of its operation for queries or transactions. In addition to this last line, arbitrary debug, info, or other outputs may be produced.
Overriding the tracing filter using RUST_LOG
For debugging purposes, we may want to inspect which RPC queries Hermes is making.
Hermes makes use of the tendermint-rpc
library to issue RPC queries, but
the output of this library is by default turned off in order to keep the logs more
readable.
Using the RUST_LOG
environment variable, we can turn logging on for the
tendermint-rpc
library, as follows:
RUST_LOG=tendermint-rpc=debug,info hermes start
Setting the RUST_LOG
environment variable to tendermint_rpc=debug,info
instructs
Hermes to set the log level of the tendermint_rpc
crate to debug
and otherwise
use the info
log level.
Note: While the
tendermint-rpc
contains a dash in its name, the logging filter expects a module name, which can only contain alphanumeric characters and underscores, hence why the filter above is writtentendermint_rpc=debug
.
Example:
❯ RUST_LOG=tendermint_rpc=debug,info hermes start
2022-02-24T14:32:14.039555Z INFO ThreadId(01) using default configuration from '/Users/coromac/.hermes/config.toml'
2022-02-24T14:32:14.043500Z INFO ThreadId(01) telemetry service running, exposing metrics at http://127.0.0.1:3001/metrics
2022-02-24T14:32:14.043542Z INFO ThreadId(01) [rest] address not configured, REST server disabled
2022-02-24T14:32:14.049759Z DEBUG ThreadId(01) Incoming response: {
"jsonrpc": "2.0",
"id": "143b4580-c49e-47c1-81b2-4e7090f6e762",
"result": {
"node_info": {
"protocol_version": {
"p2p": "8",
"block": "11",
"app": "0"
},
"id": "73f9134539f9845cd253dc302e36d48ee4c0f32d",
"listen_addr": "tcp://0.0.0.0:27003",
"network": "ibc0",
"version": "v0.34.14",
"channels": "40202122233038606100",
"moniker": "ibc0",
"other": {
"tx_index": "on",
"rpc_address": "tcp://0.0.0.0:27000"
}
},
"sync_info": {
"latest_block_hash": "8396B93E355AD80EED8167A04BB9858A315A8BEB482547DE16A6CD82BC11551B",
"latest_app_hash": "22419E041D6997EE75FF66F7F537A3D36122B220EAB89A9C246FEF680FB1C97A",
"latest_block_height": "86392",
"latest_block_time": "2022-02-24T14:32:08.673989Z",
"earliest_block_hash": "0A73CFE8566D4D4FBFE3178D9BCBAD483FD689854CA8012FF1457F8EC4598132",
"earliest_app_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855",
"earliest_block_height": "1",
"earliest_block_time": "2022-01-20T09:04:21.549736Z",
"catching_up": false
},
"validator_info": {
"address": "6FD56E6AA1EEDAD227AFAB6B9DE631719D4A3691",
"pub_key": {
"type": "tendermint/PubKeyEd25519",
"value": "mR5V/QWOv/mJYyNmlsl3mfxKy1PNaOzdztyas4NF2BA="
},
"voting_power": "10"
}
}
}
2022-02-24T14:32:14.052503Z DEBUG ThreadId(21) Incoming response: {
"jsonrpc": "2.0",
"id": "0ca35e64-ea98-4fbf-bd66-c3291128ace9",
"result": {}
}
...
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:
[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 command as the results are guaranteed.
Examples
The following command is equivalent to running the Hermes instance with RUST_LOG=ibc=debug hermes start
:
hermes logs set-log-level --log-filter ibc --log-level debug
It is also possible to only change the tendermint_rpc
log level:
hermes logs set-log-level --log-filter tendermint_rpc --log-level debug
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 <RAW_FILTER>
to "[{channel=channel-1}]"
:
hermes logs set-raw-filter --raw-filter <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
.
hermes logs reset