2008-09-30 7 views

Respuesta

6

De manera predeterminada, Elmah utiliza el GUID de la aplicación de AppPool como nombre de aplicación predeterminado. Utiliza esto como la clave para identificar los errores en la tabla Elmah_Error cuando observa la interfaz web creada a través de su Módulo HTTP.

Me encargaron explorar esta opción para mi empresa a principios de este año. No pude encontrar una manera de manipular esto por defecto ya que Elmah saca el nombre de la aplicación de HttpRuntime.AppDomainAppId en el archivo ErrorLog.cs. Podrías manipularlo con la tecla que desees; sin embargo, ese es el GUID de la AppPool.

Dicho esto, pude manipular el archivo ErrorLog.cs para convertir Elmah en un marco invocable en lugar de uno basado en el controlador y permitir que establezca ApplicationName. Lo que terminé haciendo fue modificando ErrorLog.cs para incluir una propiedad que me ha permitido establecer el nombre de la siguiente manera:

public virtual string ApplicationName 
     { 
      get 
      { 
       if (_applicationName == null) { _applicationName = HttpRuntime.AppDomainAppId; } 
       return _applicationName; 
      } 
      set { _applicationName = value; } 
     } 

Lo que probablemente tendrá que hacer es ajustar esto de manera diferente y establecer el ApplicationName no HttpRuntime.AppDomainAppId pero , en cambio, un valor extraído de web.config. En general, es posible. La forma en que lo hice mejoró el método ErrorLog.Log(ex) por lo que podría usar Elmah tiene un marco invocable más allá de las aplicaciones web. Mirando hacia atrás, desearía haber hecho el enfoque de la aplicación/web.config en su lugar.

Una cosa a tener en cuenta al cambiar el nombre de la aplicación en Elmah. El controlador http que genera la interfaz /elmah/default.aspx ya no funcionará. Todavía estoy tratando de encontrar tiempo para dar la vuelta a tal; sin embargo, es posible que deba considerar la creación de una interfaz personalizada cuando se implementa.

+3

Bastante pequeña objeción, pero me gusta este patrón mejor: return _applicationName ?? (_applicationName = HttpRuntime.AppDomainAppId); –

+0

En los procedimientos almacenados en la base de datos de Elmah hay filtros en el nombre de la aplicación. Cambié todos los procedimientos almacenados en mi entorno para ignorar este filtro y poder ver todos los errores en una sola consola. –

50

Esto ahora se puede hacer simplemente en marcado. Simplemente agregue un atributo applicationName al elemento errorLog en la sección <elmah> del archivo web.config. Ejemplo:

<errorLog type="Elmah.SqlErrorLog, Elmah" 
    connectionStringName="connectionString" applicationName="myApp" /> 

he probado esto y funciona tanto cuando se conecta una excepción y al ver el registro a través de Elmah.axd.

Source

En el caso de la OP, uno se imagina que se puede configurar mediante programación también, pero no he probado eso. Para mí, e imagino que para la mayoría de los escenarios, el enfoque de marcado es suficiente.

+0

¿Dónde colocas exactamente esta línea de código? No puedo conseguir que funcione. :( – Chiramisu

+0

En la sección del archivo web.config. –

+1

Gracias. Acabo de enterarme de que primero tiene que definirlo en ''. – Chiramisu

Cuestiones relacionadas