.net 3.5 iniciando sesión en un archivo desde web.config

Tengo un sitio web .net 3.5 que funciona bien cuando lo ejecuto en Visual Studio. Sin embargo, cuando lo ejecutamos en IIS hay algunos errores. Lo que me gustaría hacer es agregar algún tipo de registro a web.config para que registre lo que está sucediendo en el sitio web en un archivo. ¿Alguna buena manera de hacer esto? Gracias

preguntado el 12 de junio de 12 a las 15:06

4 Respuestas

Si su código genera información de registro usando las funciones integradas de .NET System.Diagnostics.Trace, puede controlar y configurar a dónde van esos rastros usando su archivo web.config.

En su código, use llamadas como

System.Diagnostics.Trace.TraceInformation("Your log info here");

En su web.config, configure un detector de seguimiento de registro de eventos como este:

<configuration>
  <system.diagnostics>
    <trace autoflush="false" indentsize="4">
      <listeners>
        <add name="myListener" 
          type="System.Diagnostics.TextWriterTraceListener" 
          initializeData="TextWriterOutput.log" />
        <remove name="Default" />
      </listeners>
    </trace>
  </system.diagnostics>
</configuration>

Esto enrutará la salida de seguimiento de su programa al archivo de texto TextWriterOutput.log

Más información aquí: http://msdn.microsoft.com/en-us/library/system.diagnostics.tracelistener.aspx

Respondido el 12 de junio de 12 a las 17:06

¿Cuál es la ruta donde se escribirá el archivo de registro? - lhunath

Probablemente el directorio bin de la aplicación o los datos de la aplicación del usuario. Probablemente pueda especificar una ruta de nombre de archivo completa en la cadena initializeData. - dthorpe

No entiendo lo que quiere decir con "pasarle a un archivo", pero mi forma preferida de agregar el registro es usar NRegistro.

NLog está disponible a través de NuGet, es potente y bastante fácil de configurar. Puede tener diferentes acciones de registro para diferentes tipos de errores. Por ejemplo, registro la mayoría de las cosas en un archivo, pero también tengo errores fatales al enviar un correo electrónico al equipo de operaciones, para muchas de mis aplicaciones web que usan NLog.

Si eso no es lo que está buscando, actualice su pregunta para ser más claro sobre el problema que desea resolver.

Respondido el 12 de junio de 12 a las 15:06

Uno de los marcos de registro más poderosos (en mi opinión) es ELMAH. Puede registrar errores automáticamente y también puede implementar sus propios disparadores para almacenar información en los registros.

Lo mejor de todo es que puede implementarlo sin cambios en el código base. Solo se necesitan cambios en web.config o machine.config.

Respondido el 12 de junio de 12 a las 15:06

Realmente debería usar un buen marco de registro como NLog (como se sugiere en otro lugar). Pero si solo necesita algo rápido y sucio, considere agregar un manejo simple de errores al evento Global.asax Application_Error, así (sin memoria):

protected void Application_Error(object sender, EventArgs e)
{
    // Get error and log objects
    var exception = Server.GetLastError();
    var log = new System.IO.StreamWriter("c:\\path\\to\\log.txt");

    // Write out what you need and close the file
    log.WriteLine(exception.Message);
    log.Close();

    // Redirect to error page ..
}

Recuerde asegurarse de tener los permisos necesarios para abrir/crear el archivo de registro también.

Respondido el 12 de junio de 12 a las 17:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.