2012-05-01 11 views
8

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

22

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!

+0

¿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

+0

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

3

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

ivy

1

me gustaría añadir 2 cosas que @chazomaticus respuesta:

  1. Por qué no soy capaz de ver cualquier salida de depuración/registro?

    Tienes que establecer la variable de entorno G_MESSAGES_DEBUG en all. 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 y help en lugar de all.

  2. ¿Dónde puedo encontrar la documentación para cada función de registro?

Más información: