Emitindo Logs
msg! e sol_log_data escrevem nos logs de transação consumidos por explorers, indexers e simulações. Use com moderação - cada log gasta compute units.
Busque em todas as páginas da documentação
msg! e sol_log_data escrevem nos logs de transação consumidos por explorers, indexers e simulações. Use com moderação - cada log gasta compute units.
solana_program::msg!("vault deposit {}", amount);Quando usar:
pub fn deposit(amount: u64) -> ProgramResult {
solana_program::msg!("deposit_start amount={}", amount);
if amount == 0 {
solana_program::msg!("deposit_reject zero");
return Err(ProgramError::InvalidArgument);
}
solana_program::msg!("deposit_ok");
Ok(())
}O que isso demonstra:
Logs escalam com comprimento de string e contagem.
solana_program::log::sol_log_data(&[b"evt", &amount.to_le_bytes()]);| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
Anchor emit! | Events estruturados | Apenas nativo |
| Códigos de erro customizados | UX do usuário | Debug interno |
| Traces de simulação off-chain | Apenas dev | Observabilidade em produção |
logMessages no meta da transação.
Limitado por CU e limites de tx.
O segundo para chunks binários.
Geyser/webhooks fazem parse de linhas de log.
Comum para builds de release.
Ainda emitidos antes do ponto de falha.
Todos os logs mesclados em ordem.
Sim com simulateTransaction.
Re-profile CU se logar muito.
Para design indexer-first sim.
Envolva msg! em cfg.
OK a curto prazo para debug.
Versões do stack: Esta página foi escrita para Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1, anchor-lang 0.32.1, Rust 1.91.1, @solana/kit 7.0.0, Surfpool 0.12.0 e LiteSVM 0.6.x.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026