I’m upgrading the NNS Governance canister to the latest version in the Juno Docker setup (and running into a few issues reported here). I’ve noticed the logging has become more verbose, is that possible? Is there a way to suppress all logs below the error level?
As a canister consumer, I’d like the option to hide logs from the CMC and Governance canisters, as they’re not relevant to my development workflow. I might be interested in whether there was an issue during setup but, any additional details - more than one line that tells me the installation is over - is kind of noise.
juno-console-1 | 2025-05-14 06:19:10.718863342 UTC: [Canister rkp4c-7iaaa-aaaaa-aaaca-cai] [cycles] init() with ledger canister ryjl3-tyaaa-aaaaa-aaaba-cai, governance canister rrkah-fqaaa-aaaaa-aaaaq-cai, exchange rate canister , minting account 832cc22cc68fa2dd21bc6d400298bb80846882d0a5ca7eb7369ab2dca03dfa10, and cycles ledger canister
juno-console-1 | 2025-05-14 06:19:12.009088551 UTC: [Canister rrkah-fqaaa-aaaaa-aaaaq-cai] [Governance] canister_init: Initializing with: economics: Some(NetworkEconomics { reject_cost_e8s: 100000000, neuron_minimum_stake_e8s: 100000000, neuron_management_fee_per_proposal_e8s: 1000000, minimum_icp_xdr_rate: 100, neuron_spawn_dissolve_delay_seconds: 604800, maximum_node_provider_rewards_e8s: 100000000000000, transaction_fee_e8s: 10000, max_proposals_to_keep_per_topic: 100, neurons_fund_economics: Some(NeuronsFundEconomics { max_theoretical_neurons_fund_participation_amount_xdr: Some(Decimal { human_readable: Some(“750_000.0”) }), neurons_fund_matched_funding_curve_coefficients: Some(NeuronsFundMatchedFundingCurveCoefficients { contribution_threshold_xdr: Some(Decimal { human_readable: Some(“75_000.0”) }), one_third_participation_milestone_xdr: Some(Decimal { human_readable: Some(“225_000.0”) }), full_participation_milestone_xdr: Some(Decimal { human_readable: Some(“375_000.0”) }) }), minimum_icp_xdr_rate: Some(Percentage { basis_points: Some(10000) }), maximum_icp_xdr_rate: Some(Percentage { basis_points: Some(1000000) }) }), voting_power_economics: Some(VotingPowerEconomics { start_reducing_voting_power_after_seconds: Some(15778800), clear_following_after_seconds: Some(2629800), neuron_minimum_dissolve_delay_to_vote_seconds: Some(15778800) }) }), genesis_timestamp_seconds: 0, neuron count: 1
juno-console-1 |CMC deployed. ID: rkp4c-7iaaa-aaaaa-aaaca-cai
juno-console-1 |NNS Governance deployed. ID: rrkah-fqaaa-aaaaa-aaaaq-cai
juno-console-1 | 2025-05-14 06:19:16.899032178 UTC: [Canister rrkah-fqaaa-aaaaa-aaaaq-cai] [Governance] Updated daily maturity modulation rate to (in basis points): 0, at: 1747203556. Last updated: None
juno-console-1 | 2025-05-14 06:19:17.551053970 UTC: [Canister rrkah-fqaaa-aaaaa-aaaaq-cai] [Governance] Proposal 1 decided, thanks to majority. Tally at decision time: Tally { timestamp_seconds: 1747203557, yes: 0, no: 0, total: 0 }
juno-console-1 | 2025-05-14 06:19:17.551053970 UTC: [Canister rrkah-fqaaa-aaaaa-aaaaq-cai] [Governance] Proposal 2 decided, thanks to majority. Tally at decision time: Tally { timestamp_seconds: 1747203557, yes: 249914192248458, no: 0, total: 249914192248458 }
juno-console-1 | 2025-05-14 06:19:17.551053970 UTC: [Canister rkp4c-7iaaa-aaaaa-aaaca-cai] [cycles] conversion rate update: IcpXdrConversionRate { timestamp_seconds: 1747203557, xdr_permyriad_per_icp: 41388 }
juno-console-1 | 2025-05-14 06:19:17.551053970 UTC: [Canister rrkah-fqaaa-aaaaa-aaaaq-cai] [Governance] Execution of proposal: 2 succeeded. (Proposal title: Some(“ICP/XDR Conversion Rate”))
I agree.
I tend to start the replica in a multiplexed session in order to escape the verbose logs:
tmux new -s replica
dfx start --clean --background
dfx nns install
CTRL B + D
Then if I ever need to check what’s going on with I reattach to that session with tmux attach -t replica
It would be nice to not have to do this and instead be able to specify the level of verbosity that you’re after with the logs.
Yes, that would definitely be nice. In the meantime, perhaps, you can pipe the output through
| grep -v "Canister rrkah-fqaaa-aaaaa-aaaaq-cai" \
| grep -v "I do not need to see this spam either" \
...
?
I don’t think it’s that a viable option unfortunately, since the verbosity affects all developers, not just me. It would mean either baking grep
into the tooling I provide or expecting each developer to run it themselves, plus offering OS-specific instructions. Either way, it’s not exactly a great DX.
It is admittedly not ideal, but at least it’s something people can do right now.