post icon

Guardar log en el registro de eventos de Windows con C#.Net

Guardar log de nuestros sistemas siempre es muy importante, nos ayudará posteriormente a resolver problemas y conocer sus orígenes, autores y otros. Esto podemos hacer de muchas maneras, en alguna tabla en la base de datos, en un fichero de log, enviando por email, y muchas otras maneras. También podemos almacenarlo en el registro de eventos de Sistema Operativo Windows.

El framework nos facilita ésta tarea, tan sólo se necesita muy poco código para lograr este cometido. Crearemos una pequeña clase que recibirá los parámetros necesarios, y podrá ser invocado desde cualquier lugar.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using System;
using System.Diagnostics;
 
public class EventLogger
{
	public EventLogger()
	{
 
	}
 
    private void CrearLog(string str)
    {
        if (!EventLog.SourceExists(str))
            EventLog.CreateEventSource(str, str);
    }
 
    public void Save(string str, Exception ex)
    {
        CrearLog(str);
        EventLog evento = new EventLog(str);
        evento.Source = str;
        evento.WriteEntry(ex.Message, EventLogEntryType.Error);
    }
}

Una manera tonta de utilizarlo es la siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
    protected void metodo(object sender, EventArgs e)
    {
        try
        {
            int error = 0;
            int resultado = 5 / error;
        }
        catch (Exception ex)
        {
            EventLogger ev = new EventLogger();
            ev.Save("Devtroce", ex); 
        }
    }

En una siguiente entrega veremos como leer este log de eventos y mostrarlos en una aplicación.

Comentarios desde Facebook:

  1. avatar
    SolidSnake PARAGUAY Mozilla Firefox Windows
    18 junio 2010 at 13:25 #
    string lazypatch = "bug solved?";
  2. avatar
    Cactus PARAGUAY Google Chrome Windows
    18 junio 2010 at 13:16 #

    que falta de seriedad este blog choto, como no van a andar los tags..

    int num = 666;

    probando con corchetes

    int num = 666;

    Chore, tengo que revisar los fuentes ahora 🙁

  3. avatar
    SolidSnake PARAGUAY Mozilla Firefox Windows
    18 junio 2010 at 13:08 #

    Nahani

    byte[] buffer = new byte[512];

    no sale!? 😕

  4. avatar
    SolidSnake PARAGUAY Mozilla Firefox Windows
    18 junio 2010 at 13:05 #

    sneak test

    byte[] buffer = new byte[512];

  5. avatar
    DebianZeus PARAGUAY Mozilla Firefox Windows
    18 junio 2010 at 12:26 #

    No anda el <<del> pre lang="csharp" </del>> 🙁

    • avatar
      GeekZero PARAGUAY Google Chrome Windows
      18 junio 2010 at 12:30 #

      Y cerraste el tag con <barra pre> ?

    • avatar
      GeekZero PARAGUAY Google Chrome Windows
      18 junio 2010 at 12:48 #

      probando tag pre

      <pre lang="csharp">

      string dev = "troce";

      </pre>

  6. avatar
    DebianZeus PARAGUAY Mozilla Firefox Windows
    18 junio 2010 at 12:24 #

    Buen articulo, yo comparto una funcioncita con lo que aprendimos aqui en el post que uso en mis WebApp para loguearme los deslices que tenemos:

    <pre lang="csharp">

    static public bool Manejador_de_Excepciones(string miApp, Exception myError)

    {

    try

    {

    string eventLog = miApp + "_Excepciones";

    string eventSource = miApp;

    string myErrorMessage = String.Empty;

    myErrorMessage += "Mensaje:" + Environment.NewLine +

    myError.Message.ToString() + Environment.NewLine + Environment.NewLine;

    myErrorMessage += "Origen" + Environment.NewLine +

    myError.Source + Environment.NewLine + Environment.NewLine;

    myErrorMessage += "Stack trace" + Environment.NewLine +

    myError.StackTrace + Environment.NewLine + Environment.NewLine;

    myErrorMessage += "Target site" + Environment.NewLine +

    myError.TargetSite.ToString() + Environment.NewLine + Environment.NewLine;

    //Si nuestra excepcion es producida dentro de otra.

    while (myError.InnerException != null)

    {

    myErrorMessage += "Stack trace" + Environment.NewLine +

    myError.StackTrace + Environment.NewLine + Environment.NewLine;

    myErrorMessage += "Mensaje" + Environment.NewLine +

    myError.Message.ToString() + Environment.NewLine + Environment.NewLine;

    myErrorMessage += "Origen" + Environment.NewLine +

    myError.Source + Environment.NewLine + Environment.NewLine;

    myErrorMessage += "Target site" + Environment.NewLine +

    myError.TargetSite.ToString() + Environment.NewLine + Environment.NewLine;

    myError = myError.InnerException;

    }

    // Asegurate que nuestro EventLog exista, sino lo creamos

    if (!EventLog.SourceExists(eventLog))

    EventLog.CreateEventSource(eventSource, eventLog);

    // Crea una instancia de nuestro EventLog y asignamos a nuestro 'Source'.

    EventLog myLog = new EventLog(eventLog);

    myLog.Source = eventSource;

    // Write the error entry to the event log.

    myLog.WriteEntry("Error ocurrido en : "

    + eventSource + Environment.NewLine + myErrorMessage,

    EventLogEntryType.Error);

    return true;

    }

    catch (Exception ERROR) // OMGCat si caemos aca jajajaja

    {

    Console.WriteLine("Mensaje de Error:{0}", ERROR.ToString()); //Si tenemos consola

    Debug.WriteLine("Mensaje de Error:{0}", ERROR.ToString()); //Esto imprime si estas debugeando en tu VS

    //Podriamos loguear en un archivo de texto 😉

    return false;

    }

    }

    </pre>

    Espero les sirva, un saludo 🙂

    • avatar
      GeekZero PARAGUAY Google Chrome Windows
      18 junio 2010 at 12:35 #

      Gracias por el aporte 🙂

      PD: mato el comentario OMGCat 😛

Responder