jueves, 4 de enero de 2007

Logs/listeners en .NET

Hay veces que necesitamos escribir información de traza o mensajes de error en ficheros de Log para dejar constancia de cómo el código se va ejecutando paso a paso o para conocer con exactitud la descripción exacta del mensaje de error. En este último caso además de presentar un mensaje amigable al usuario, también es muy importante obtener una información detallada de lo ocurrido, de esta forma siempre es más fácil encontrar el problema y resolverlo.

Siempre hemos estado acostumbrados a llevar a cabo esto de la forma quizás más común, es decir, un fichero de texto e ir escribiendo en el según sea necesario. Por otro lado, y en multitud de ocasiones no llegamos a hacer uso de esta técnica porque, o bien estamos un poco perezosos, porque creemos que no es necesario dedicar tiempo a hacer este trabajo, etc, sin embargo, cambiaremos de opinión aprovechando la técnica que nos presenta .NET y además tratándose de una tarea de buenas prácticas.

Ejemplo:

TraceSwitch oSwitch = new TraceSwitch("MySwitch", "My TraceSwitch");
StreamWriter oWriter = new StreamWriter(File.Open(@"c:\test.txt", FileMode.Append));
TextWriterTraceListener oListener = new TextWriterTraceListener(oWriter);
Trace.Listeners.Add(oListener);
try
{

     int i=0;
     i = 0/i;

}
catch(Exception ex)
{
     Trace.WriteLine(oSwitch.TraceError, "Error: " + ex.Message);
}
finally
{
     Trace.Listeners.Clear();
     oWriter.Close();
}

En este ejemplo se realiza una escritura en un fichero de log (“c:\test.txt”) cada vez que se produce un error. Hasta aquí, el ejemplo es muy parecido a lo ya conocido, sólo que diferente, lo que le hace más potente es la posibilidad de cambiar el destino de datos, así como la posibilidad de añadir o quitar más listeners sin ninguna complicación.

 

Aprovechar todas estas posibilidades "quizá desconocidas o no tan usadas" nos hace un poquito más eficientes.

 

Una vez más espero haber sido claro y conciso.

Saludos.

Juanlu


This page is powered by Blogger. Isn't yours?