Soy nuevo en la programación de Vala y tengo experiencia con Java y .NET, pero no he podido encontrar nada útil sobre cómo iniciar sesión con Vala. ¿Hay algún recurso de registro útil como log4j o log4net o cuál es la forma sugerida para iniciar sesión en Vala con escalas en varios niveles de registro como error, advertir, depurar y rastrear? ¿Y qué hay de la programación defensiva como aserciones y contratos? ¿Hay alguna o la forma sugerida de hacer una programación defensiva y obtener los registros más útiles con rastros de pila y una causa raíz precisa? Gracias por un consejo.Logging with Vala
Respuesta
registro
Vala tiene algunas facilidades de registro bastante robustos incorporados. Puede utilizar debug()
, message()
, warning()
, error()
y critical()
como accesos directos para el poco más compleja función log()
. Todos están incluidos en la base (incluidos automáticamente) GLib
namespace.
Si desea redirigir la salida de registro o enviar diferentes tipos de mensajes a diferentes destinos, todo lo que necesita está en el GLib.Log
namespace. Es posible que desee leer el glib docs on logging para lo que está sucediendo detrás de las escenas allí.
programación defensiva
Vala también incluye soporte para las afirmaciones y contratos. La versión corta: assert()
y assert_not_reached()
para aserciones, y requires()
y ensures()
en las firmas de métodos para contratos. Consulte la sección de tutorial en Assertions and Contract Programming para obtener más información.
Tratamiento de errores
manejo de errores de Vala es un poco extraño: de aspecto similar a las excepciones, pero no exactamente lo mismo. La sección de tutorial en Error Handling cubre los conceptos básicos bastante bien, y de nuevo puede ser útil leer el glib docs on errors para obtener una comprensión más avanzada de lo que está sucediendo detrás de las escenas. Por lo que yo sé, no hay forma de obtener un seguimiento de pila de los errores de Vala, solo un tipo y un mensaje.
Buenas Prácticas
En términos de mejores prácticas, creo que Vala es similar suficiente para Java o C# que las prácticas que ya conoce se pueden aplicar en un sentido general. Sugiero jugar con estas características para tener una idea de cómo se ven los detalles en Vala. ¡Buena suerte!
Como una adición a @chazomaticus gran respuesta, puede obtener stacktrace de Vala deshaciendo la pila de llamadas.
Es solo que esto no está cocido en el lenguaje Vala.
Resulta que tengo escrita de dicha biblioteca: ivy
me gustaría añadir 2 cosas que @chazomaticus respuesta:
Por qué no soy capaz de ver cualquier salida de depuración/registro?
Tienes que establecer la variable de entorno
G_MESSAGES_DEBUG
enall
. Lo cual también se menciona en la documentación, pero no se explica con más detalle. P.ej. para debug:public static int main (string[] args) { // Use "G_MESSAGES_DEBUG=all ./test" to print debug messages! // Output: ``** (process:<PID>): DEBUG: <FILENAME>:<LINE>: my 10. debug message`` debug ("my %d. %s", 10, "debug message"); return 0; } valac --pkg glib-2.0 GLib.debug.vala G_MESSAGES_DEBUG=all ./GLib.debug ./GLib.debug
Si desea further restrict la salida, se puede utilizar
error
,warning
,critical
,message
,info
,debug
yhelp
en lugar deall
.¿Dónde puedo encontrar la documentación para cada función de registro?
Más información:
- 1. ¿Sobrevivirá Vala?
- 2. vala un lenguaje multiplataforma?
- 3. Vala vapi file documentation
- 4. Vala para Android?
- 5. Logging * Business * Events - use logging framework?
- 6. Spring hibernate Transaction Logging
- 7. SynchronizationLockException + Logging
- 8. Pyramid logging
- 9. Glassfish Logging
- 10. Logging NSNotifications
- 11. Administración de memoria de Vala
- 12. Vala: Gotchas, consejos y trucos
- 13. Vala para los complementos pidgin
- 14. Zend Enable SQL Query logging
- 15. Rails Logging API
- 16. python logging alternatives
- 17. C logging libraries
- 18. JBoss AS 7: Logging
- 19. logging con filtros
- 20. Ant: Logging via Log4j
- 21. Glassfish v3 logging
- 22. Restkit, Stop Logging?
- 23. Python Logging setlevel
- 24. SOAP logging axis2
- 25. slf4j logging sintaxis
- 26. upstart logging output enabled
- 27. git repository cloning logging
- 28. .Net Web Service Logging
- 29. Logging InnerException usando Log4Net
- 30. Django debug toolbar logging
¿El Vala mensajes personalizados de apoyo para violaciónes de contrato? ¿O va a dar un mensaje de error predeterminado críptico? Estoy tratando de encontrar una buena manera de lanzar errores y las secciones predeterminadas de "Manejo de errores"/"Programación contractual" del tutorial de Vala no parecen describir nada realmente útil. – weberc2
Parece que los contratos se compilan en llamadas a g_return_if_fail(), que no admite ningún mensaje de error personalizado. Y tiene razón en que el mensaje de error que muestra el código C generado no es el más útil. Si quieres errores personalizados con tus propios mensajes, Vala no te ofrece ningún azúcar sintáctico, solo tendrás que hacerlo a la antigua usanza con if y throw. – chazomaticus