Native Upload Logging
The native upload pipeline (store_blob_native(),
certify(), committee resolution in
pytusk.core.chain.committee) reports progress through the standard
library logging module rather than by printing directly. This page
documents the logger names, what they emit, and how to attach a handler
— both from tusky and from library code calling pytusk directly.
Logger Names
Every pytusk module gets its own logger via logging.getLogger(__name__),
so the three loggers relevant to native upload progress are:
pytusk.core.native_upload.fanoutEmits
INFO-level records for: per-node sliver-upload outcomes (success, failure with reason, cancelled stragglers), and sliver fan-out start/summary and periodic heartbeat progress lines during the fan-out stage. EmitsWARNING-level records for individual storage-node failures that are tolerated because quorum is still reachable from the rest of the committee (dead DNS, expired/self-signed TLS certs, and similar node-side issues are common on testnet and do not by themselves fail the upload).pytusk.core.native_upload.confirmEmits
INFO-level records for confirmation-collection progress (quorum reached, grace window, per-node confirmation outcomes) and its own periodic heartbeat progress lines.pytusk.core.chain.committeeEmits
INFO-level records for committee/storage-pool resolution:GetDynamicFieldspage counts when reading the staking object and pools table.
All three loggers propagate up to the pytusk logger by Python’s normal
logger-hierarchy rules — attaching a handler to pytusk (rather than
to each submodule individually) is the simplest way to capture
everything.
Using tusky’s Built-in Flags
store_blob_native and certify_blob accept --log-file PATH
and/or --verbose:
tusky store_blob_native --file blob.bin --epochs 5 --mode execute \
--log-file upload.log --verbose
--log-file PATHAdds an
INFO-level file handler at exactlyPATH— no default or derived path. Written even if the run fails partway through.--verboseAdds an
INFO-level stream handler to stdout, with stdout reconfigured for line buffering so progress is visible live even when output is redirected to a file.
Neither is enabled by default; passing neither means the pipeline runs silently except for its final JSON receipt (or error) on stdout/stderr. Both can be combined, and the setup is idempotent — safe to configure once per process.
Attaching Your Own Handler
Library code calling pytusk.core.native_upload or
pytusk.core.chain.committee directly (not through tusky) attaches a
handler the same way as any other Python logger:
import logging
logger = logging.getLogger("pytusk")
logger.setLevel(logging.INFO)
logger.addHandler(logging.StreamHandler())
# ... call store_blob_native() / certify() / committee resolution ...
No handler is configured by pytusk itself outside of tusky’s opt-in
setup — a library consumer that adds no handler sees no output, per
Python logging’s standard “library code should not configure logging”
convention.