C'è un modo per impostare programmaticamente il nome dell'applicazione in Elmah?

StackOverflow https://stackoverflow.com/questions/153054

  •  03-07-2019
  •  | 
  •  

Domanda

Devo cambiare il nome dell'app in base alla configurazione che sto usando in Visual Studio. Ad esempio, se mi trovo nella configurazione di debug, voglio che il nome dell'app venga visualizzato come 'App_Debug' nel campo Applicazione nella tabella Elmah_Error. Qualcuno ha qualche esperienza con questo? O c'è un altro modo per farlo?

È stato utile?

Soluzione

Per impostazione predefinita, Elmah utilizza il GUID dell'applicazione AppPool come nome dell'applicazione predefinito. Usa questo come chiave per identificare gli errori nella tabella Elmah_Error quando guardi l'interfaccia web creata attraverso il suo modulo HTTP.

Mi è stato assegnato il compito di esplorare questa opzione per la mia azienda all'inizio di quest'anno. Non sono riuscito a trovare un modo per manipolarlo per impostazione predefinita poiché Elmah estrae il nome dell'applicazione da HttpRuntime.AppDomainAppId nel file ErrorLog.cs. Potresti manipolarlo con qualsiasi chiave tu voglia; tuttavia, questo è il GUID dell'AppPool.

Detto questo, sono stato in grado di manipolare il file ErrorLog.cs per trasformare Elmah in un framework richiamabile anziché in uno basato su handler e permettermi di impostare ApplicationName. Quello che ho finito per fare è stato modificare ErrorLog.cs per includere una proprietà che mi ha permesso di impostare il nome come di seguito:

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

Ciò che probabilmente dovrai fare è regolarlo in modo diverso e impostare ApplicationName non su ErrorLog.Log(ex) ma, invece, un valore estratto da web.config. Tutto sommato, è possibile. Il modo in cui l'ho fatto ha migliorato il metodo <=> in modo da poter usare Elmah ha un framework richiamabile oltre alle applicazioni web. Guardando indietro, vorrei invece aver seguito l'app / web.config.

Una cosa da tenere a mente quando si cambia il nome dell'applicazione in Elmah. Il gestore http che genera l'interfaccia /elmah/default.aspx non funzionerà più. Sto ancora cercando di trovare il tempo per tornare indietro a questo; tuttavia, potrebbe essere necessario cercare di creare un'interfaccia personalizzata durante l'implementazione.

Altri suggerimenti

Questo ora può essere fatto esclusivamente in markup. Aggiungi semplicemente un attributo applicationName all'elemento errorLog nella sezione <elmah> del file web.config. Esempio:

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

L'ho provato e funziona sia quando si registra un'eccezione sia quando si visualizza il registro tramite Elmah.axd.

Nel caso del PO, si potrebbe immaginare che possa essere impostato anche a livello di programmazione, ma non l'ho provato. Per me e per la maggior parte degli scenari immagino che l'approccio di markup sia sufficiente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top