none
Log de excepciones

    Pregunta

  • Buenas!!

    Tengo una aplicación en c# y me gustaria saber si hay alguna forma de poder logar las excepciones.

    Hasta ahora todo lo que he visto es de la forma:

    try{

    ...

    }catch(Exception ex){

    WriteLog(ex); // cualquier metodo para escribir en un fichero

    }

    Me gustaría saber si esto se puede hacer sin tener que escribir nada dentro del catch, alguna forma de hacerlo distinta de tener que escribir en cada catch.

    GRACIAS!!!

    lunes, 22 de agosto de 2016 12:51

Todas las respuestas

  • Podrías capturar globalmente las excepciones a nivel de AppDomain. Esto se hace conectando un manejador al evento UnhandledException del CurrentDomain, y dentro de ese manejador puedes logar lo que quieras.

    Documentación y ejemplo de manejador aquí:

    https://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception(v=vs.110).aspx

    martes, 23 de agosto de 2016 6:28
  • hola

    si se trata de un desarrollo winform podrias controlar el Application.ThreadException, de esta forma todos los errores que generes ingresaran alli y podras registrarlos

    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
     
        Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException);
     
        Application.Run(new Form1());
    }
     
    static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
    {
        WriteLog(e.Exception);
    }

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina



    martes, 23 de agosto de 2016 9:30
  • Y hay alguna forma de que si salta una excepción que esta fuera del try-catch, el programa no se detenga?
    martes, 23 de agosto de 2016 9:41
  • Y hay alguna forma de que si salta una excepción que esta fuera del try-catch, el programa no se detenga?

    Maticemos eso. ¿Qué entiendes por "que no se detenga"? ¿Por dónde debería continuar el programa? Continuar en la siguiente instrucción a la que generó la excepción en general no tendrá sentido, por ejemplo, si da una excepción al abrir un fichero porque el fichero no existe, no puedes continuar ejecutando las sentencias que vienen detrás para leer el fichero, porque lógicamente fallarán todas. Si tienes alguna lógica concreta para decidir qué hay que hacer en ese caso, para eso tienes el try...catch. Pero si falla en cualquier otro sitio en el que no tenías nada previsto, ¿qué se entiende por "no detenerse"? ¿qué harías a continuación? Lo que decidas hacer, puedes ponerlo en el "handler" global de excepciones del appdomain.
    martes, 23 de agosto de 2016 19:27