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.
Receita
solana_program::msg!("vault deposit {}", amount);Quando usar:
- Depurar instructions que falham em devnet.
- Correlacionar passos on-chain com analytics off-chain.
- Instrumentação temporária durante correções de auditoria.
Exemplo Funcional
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:
- Tokens de prefixo estruturados ajudam a fazer grep nos logs.
- Logs de caminho de rejeição antes do retorno de erro.
- Remova ou limite logs verbosos antes da mainnet.
Aprofundamento
Custo de CU
Logs escalam com comprimento de string e contagem.
Alternativas a Logs
- Erros customizados para usuários
- Events Anchor para indexers
Notas Rust
solana_program::log::sol_log_data(&[b"evt", &amount.to_le_bytes()]);Erros Comuns
- Logs em loops - Explosão de CU.. Correção: Logue apenas resumo.
- Dados sensíveis - Logs são públicos.. Correção: Nunca logue segredos ou PII completo.
- Depender de logs para fluxo de controle - Logs não são inputs de consenso.. Correção: State deve codificar a verdade.
- Panics de format - Format ruim é erro de dev.. Correção: Use literais simples em prod.
- Ruído em produção - Difícil de indexar.. Correção: Prefira events com schema.
Alternativas
| 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 |
FAQs
Onde aparecem?
logMessages no meta da transação.
Comprimento máximo de log?
Limitado por CU e limites de tx.
msg vs sol_log_data?
O segundo para chunks binários.
Indexar logs?
Geyser/webhooks fazem parse de linhas de log.
Feature flag de logs?
Comum para builds de release.
Logs em falha?
Ainda emitidos antes do ponto de falha.
Múltiplos programas?
Todos os logs mesclados em ordem.
Simulate mostra logs?
Sim com simulateTransaction.
Mudanças Agave 4.1.1?
Re-profile CU se logar muito.
Substituir por events?
Para design indexer-first sim.
Macro apenas debug?
Envolva msg! em cfg.
Logar bump de PDA?
OK a curto prazo para debug.
Relacionado
- Logging com msg! - Logging consciente de CU
- Emitindo Events - Events estruturados
- Depurando Transações que Falharam - Lendo output
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.