Registro con msg!
msg! escribe líneas legibles por humanos en los registros de transacciones. Útil para desarrollo y operaciones, pero cada llamada cuesta unidades de cómputo: presupuesta los registros como cualquier código de ruta crítica.
Receta
solana_program::msg!("swap in={} out={}", amount_in, amount_out);Cuándo usar esto:
- Para depurar fallos en devnet.
- Para correlacionar pasos en la cadena con tickets de soporte.
- Para instrumentación temporal durante la respuesta a incidentes.
Ejemplo Funcional
#[cfg(feature = "verbose_logs")]
macro_rules! vlog { ($($t:tt)*) => { solana_program::msg!($($t)*) }; }
#[cfg(not(feature = "verbose_logs"))]
macro_rules! vlog { ($($t:tt)*) => {}; }Lo que esto demuestra:
- Registros controlados por características para compilaciones de lanzamiento.
- Macros que no hacen nada cuando están deshabilitadas.
- La ruta de producción permanece silenciosa.
Análisis Profundo
Impacto de las CU
Los registros se cobran por llamada al sistema + bytes.
Registros Binarios
sol_log_data para pares clave/valor compactos.
Notas de Rust
// Prefiere prefijos fijos: "MI PROG:paso1"Errores Comunes
- Registros en bucle cerrado - CU excedidas. Solución: Agregar fuera del bucle.
- PII en registros - Datos de cadena pública. Solución: Redactar.
- Confiar en registros para autenticación - El atacante ve los mismos registros. Solución: El estado es la verdad.
- Formatear cadenas de usuario - La inyección es irrelevante pero costosa. Solución: Registrar hashes o IDs.
- Dejar registros de depuración en mainnet - Ruido y costo. Solución: Banderas de características.
Alternativas
| Alternativa | Usar cuándo | No usar cuándo |
|---|---|---|
| Solo errores personalizados | Orientado al usuario | Depuración interna |
| Eventos de Anchor | Amigable para indexadores | Las CU aún se aplican |
| Simulación fuera de la cadena | Desarrollo | Producción |
Preguntas Frecuentes
Costo de CU de msg?
No trivial: simular.
¿Muestra Explorer?
Sí, logMessages.
¿log_data?
Segmentos binarios.
¿msg de Anchor?
Misma llamada al sistema.
¿Pinocchio?
Registro de llamada al sistema.
¿Registros máximos?
Límite de Tx + CU.
¿Registro estructurado?
Los eventos son mejores.
¿Indexar registros?
Plugins Geyser.
¿Eliminar para mainnet?
Recomendado o controlar por característica.
¿Sim vs en vivo?
Igual.
¿Agave 4.1.1?
Volver a perfilar después de la actualización.
¿Surfpool?
Muestra registros en el rastreo.
Relacionado
- Emitir Registros - Ángulo nativo
- Emitir Eventos - Estructurado
- Depurar Transacciones Fallidas - Flujo de trabajo
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.