Logs y Depuración
Transmite logs de programas en tiempo real e inspecciona transacciones fallidas con solana logs, solana confirm y solana transaction.
Receta
Tarjeta de receta de referencia rápida - lista para copiar y pegar.
solana logs
solana logs --url devnet
solana confirm -v <SIGNATURE>
solana transaction <SIGNATURE>Cuándo usar esto:
- Salida
msg!/println!de tu programa durante el desarrollo local. - Diagnóstico de errores de programas personalizados después de un envío fallido del cliente.
- Observación del tráfico en vivo en devnet mientras se prueban integraciones.
- Correlación de logs de instrucciones con el consumo de unidades de cómputo.
Ejemplo de Trabajo
# Terminal 1: transmitir logs (ejemplo de localnet)
solana config set --url http://127.0.0.1:8899
solana logs
# Terminal 2: invocar tu programa o transferir
solana transfer <RECIPIENT> 0.01 --allow-unfunded-recipient
# o: anchor test / curl RPC sendTransaction
# Después de una tx fallida, inspeccionar la firma
SIG="<FAILED_SIGNATURE>"
solana confirm -v "$SIG"
solana transaction "$SIG" --output json-compact | jq '.meta.logMessages, .meta.err'Lo que esto demuestra:
solana logsse suscribe alogsSubscribea través de WebSocket RPC.confirmdetallado imprime logs del programa y códigos de error en línea.- La salida JSON de la transacción conserva
logMessagesordenados para los tickets.
Profundización
Cómo Funciona
- Los programas emiten logs a través de macros
solana_program::logcapturados en los metadatos de la transacción. solana logsfiltra por menciones o muestra toda la salida del programa dependiendo de las banderas.- Las transacciones fallidas aún devuelven metadatos con logs hasta el punto de falla.
- El consumo del presupuesto de cómputo aparece en los campos de metadatos en las respuestas RPC.
Flujo de Trabajo de Logs
| Paso | Comando | Salida |
|---|---|---|
| Transmitir | solana logs | Líneas de programa en vivo |
| Enviar | app / CLI tx | Firma |
| Verificar | solana confirm -v | Estado + logs |
| Archivar | solana transaction --output json | Blob completo de metadatos |
Notas de bash
# Filtrar logs que mencionan el ID de tu programa
solana logs | grep "<YOUR_PROGRAM_ID>"
# Incluir logs de votos (ruidosos)
solana logs --include-votesTrampas
- Sin logs sin invocación - solo los programas ejecutados registran. Solución: confirma que tu instrucción se ejecutó realmente (verifica los bloqueos de cuentas y los firmantes).
- Truncamiento de logs - un
msg!excesivo alcanza los límites de CU y tamaño. Solución: registra resúmenes, no datos completos de la cuenta. - URL de WebSocket RPC incorrecta - el puerto HTTP ≠ puerto WS en algunos proveedores. Solución: usa el endpoint WSS documentado por el proveedor; la CLI mapea desde la URL de configuración en nodos estándar.
- Leer logs antes de confirmar - carrera si consultas demasiado pronto. Solución: espera a
confirmedo usaconfirm -ven scripts. - Ruido de logs de votos - los streams predeterminados ocultan los votos; habilitarlos inunda la salida. Solución: omite
--include-votesa menos que estés depurando validadores.
Alternativas
| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
Salida estándar de solana-test-validator | Pruebas locales de Anchor | Depuración remota en devnet |
| Pestaña de transacción del Explorador | Compartir enlaces con compañeros de equipo | Captura automatizada en CI |
simulateTransaction RPC | Pre-vuelo sin aterrizar | Post-mortem de fallos aterrizados |
| Pruebas de Surfpool / LiteSVM | Pruebas unitarias deterministas | Observación de tráfico en vivo en mainnet |
Preguntas Frecuentes
¿Funciona solana logs en devnet?
Sí - pasa --url devnet o configura la URL de configuración primero. Los endpoints públicos pueden limitar las suscripciones.
¿Por qué faltan mis líneas de msg!?
El programa puede no haberse ejecutado (instrucción anterior fallida), los logs se truncaron o filtraste el ID de programa incorrecto.
¿Qué es un error común de "El programa falló al completarse"?
Los códigos de error del programa personalizado se mapean a anchor_lang::error o a tus variantes de ProgramError - decodifica contra el enum de errores de tu programa.
¿Puedo guardar logs en un archivo?
Redirige solana logs > session.log o captura logMessages de la salida JSON de la transacción.
¿Cómo veo las unidades de cómputo utilizadas?
solana confirm -v y los metadatos de la transacción incluyen computeUnitsConsumed en versiones RPC compatibles.
¿Los logs incluyen llamadas CPI?
Sí - los logs de instrucciones internas aparecen indentados en el orden de logMessages.
¿Puedo depurar transacciones de mainnet?
Usa solana transaction <SIG> contra el RPC de mainnet - no necesitas solana logs a menos que estés transmitiendo en vivo.
¿Cómo se diferencia esto de la salida del validador local?
anchor test imprime la salida estándar del validador directamente; solana logs usa suscripciones RPC - mismo contenido, diferente transporte.
¿Por qué se cuelga confirm?
RPC no avanza, firma incorrecta o partición de red. Ctrl+C y reintenta con un endpoint más saludable.
¿Puedo observar una cuenta específica?
Usa el filtro mentions con logsSubscribe del RPC en el código del cliente; solana logs de la CLI admite filtros de mención según solana logs --help.
Relacionado
- Enviar SOL y Transacciones - genera firmas para inspeccionar
- Logs y Depuración Locales - depuración del lado del validador
- Suscripciones WebSocket - API de suscripción subyacente
- Inspeccionar Cuentas y Programas - verificaciones del estado de la cuenta
Versiones de Stack: Esta página fue 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, y LiteSVM 0.6.x.