none
como podria guardar las excepciones en una carpeta del servidor RRS feed

Todas las respuestas

  • Las excepciones NO controladas se guardan automáticamente de forma predeterminada en el registro de aplicación de Windows. Este comportamiento predeterminado puede modificarse añadiendo una sección <healthMonitoring> en el web.config. Desde ahí podrías reconfigurarlo para que se manden a un archivo de texto, o a una base de datos.

    Pero las excepciones que SÍ que están controladas, es decir, las que interceptas mediante un try...catch, que yo sepa no se pueden registrar automáticamente. Tendrías que modificar el programa buscando todos los bloques "catch" y metiendo dentro una sentencia que salve los datos de la excepción.

    viernes, 7 de marzo de 2014 7:57
  • Hola Richard,

    Puedes implementar un sistema de logs para almacenar las excepciones.

    Lo primero que debes hacer es añadir este código al webconfig, dentro de la etiqueta configuration para definir los logs y los archivos donde se guardaran las excepciones:

    <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
    </configSections>

    <log4net> <appender name="RollingFileLogError" type="log4net.Appender.RollingFileAppender,log4net"> <param name="File" value="Logs/LogError.txt" /> <maxSizeRollBackups value="10" /> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <appendToFile value="true" /> <layout type="log4net.Layout.PatternLayout,log4net"> <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" /> </layout> </appender> <logger name="LogError"> <appender-ref ref="RollingFileLogError" /> <level value="DEBUG" /> </logger> </log4net>


    En el archivo global.asax.cs, en la funcion Application_Start necesitas esta sentencia para que se configure el sistema de logs:

    log4net.Config.XmlConfigurator.Configure();

    Tambien necesitas una clase como la que sigue para definir el la función que será llamada y que configura mensaje de error:

    public class AppLog
        {
            private static AppLog _AppLog;
            private AppLog()
            {
                // Set up a simple configuration that logs on the console.
                // BasicConfigurator.Configure();
            }
    
            public static AppLog AppLogProp
            {
                get
                {
                    if (_AppLog == null)
                    {
                        _AppLog = new AppLog();
                    }
                    return _AppLog;
                }
            }
          
            private readonly ILog logErr = LogManager.GetLogger("LogError");
            
            public void logError(object message, Exception ex)
            {
                logErr.Error(message, ex);
                
            }
    }

    Por ultimo, tendrías que poner en cada catch esta llamada a la funcion creada anteriormente:

    AppLog.AppLogProp.logError(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName + " --> " + System.Reflection.MethodBase.GetCurrentMethod(), ex);

    Y yo creo que no se me olvida nada. Que sepas que puedes añadir más tipos de log, pero yo te he puesto solo para error.

    Espero que te sirva, salu2!!

    EDIT: Si que se me olvidaba algo, debes añadir una referencia en el proyecto a log4net, y añadir los using correspondientes, a log4net, y a log4net.Config


    Jose Alberto Marti



    viernes, 7 de marzo de 2014 10:53