2009-09-08 13 views
23

Abbiamo un singolo log SQL per l'archiviazione degli errori da più applicazioni. Abbiamo disattivato la pagina elmah.axd per ciascuna delle nostre applicazioni e vorremmo avere una nuova applicazione che visualizza in modo specifico gli errori di tutte le app che riportano errori nel registro SQL comune.Utilizzare Elmah.axd singolo per più applicazioni con un singolo registro DB

A partire da ora, anche se l'applicazione per tutti gli errori utilizza il registro SQL comune, visualizza solo gli errori dall'applicazione corrente. Qualcuno l'ha già fatto prima? Cosa potrebbe essere necessario modificare nel codice elmah?

+1

Grazie per aver chiesto una bella domanda in modo chiaro, hai preso le mie parole con Time machine. Sono passati quasi 6-7 anni ora. – AKS

risposta

30

Suppongo che per "Registro SQL" si intende Server MSSQL ... In tal caso, probabilmente il modo più semplice per ottenere ciò che si desidera è modificare le stored procedure create nel database di SQL Server che contiene gli errori.

Per ottenere la lista degli errori, l'ELMAH dll chiama il proc ELMAH_GetErrorsXML con il nome dell'applicazione come parametro, allora il proc filtra il ritorno con una clausola WHERE [Application] = @Application.

Basta rimuovere la clausola WHERE dal ELMAH_GetErrorsXML proc e tutti gli errori devono essere restituiti indipendentemente dall'applicazione.

Per ottenere correttamente un singolo record di errore, è necessario fare lo stesso con lo ELMAH_GetErrorXML proc, in quanto esso filtra anche per applicazione.

Questo, ovviamente, interesserà qualsiasi applicazione che recuperi errori da questo particolare database, ma presumo che nel tuo caso ne avrai sempre solo uno, quindi questo dovrebbe essere buono.

avvertimento: Non ho provato questo, quindi non posso garantire i risultati ...

+0

corretto! Vedrò le modifiche sproc. – RSolberg

+1

@ E.King, grazie la tua risposta funziona come un fascino ... – AKS

2

Sì, funziona facilmente. Tuttavia non è possibile visualizzare il nome dell'app in Elmah/Default.aspx. Non ho trovato se è confucevole - basta visualizzare una colonna in più.

+1

È vero. Il layout per quella pagina è definito nel codice ErrorLogPage.cs, quindi per aggiungere un'altra colonna dovrai scaricare l'origine, apportare le modifiche e ricompilare. http://code.google.com/p/elmah/source/browse/trunk/src/Elmah/ErrorLogPage.cs –

4

Non è un problema sovrascrivere il gestore predefinito di Elmah in modo che filtri i registri di Elmah dalle applicazioni. Ho scritto un'app di esempio che mostra come farlo con MySql: http://diagnettoolkit.codeplex.com/releases/view/103931. Si può anche controllare uno post on my blog dove spiego come funziona.

+0

+1: questo è come dovrebbe essere fatto. Pulito e semplice e non è necessario modificare né gli script DDL originali né il codice sorgente Elmah. Il post del blog spiega tutto. Buon lavoro, signore! –

+0

Ho appena implementato questo. Funziona bene! –

+0

Questa è una bella alternativa. Tuttavia, il rovescio della medaglia è che si possono ancora vedere solo gli errori da un'applicazione alla volta, e devi conoscere il nome dell'applicazione in anticipo. Se vuoi vedere un elenco di errori in tutte le applicazioni (che è il modo in cui ho interpretato la domanda), questo non lo farà, a meno che io non stia vedendo quel pezzo. –

Problemi correlati