2008-09-21 16 views
6

Sto cercando una soluzione migliore rispetto a quello che attualmente abbiamo a che fare con errori di produzione imprevisti, senza reinventare la ruota.Qual è il modo migliore per raccogliere/segnalare errori imprevisti nelle applicazioni della finestra .NET?

Un numero maggiore dei nostri prodotti sono applicazioni WinForm e WPF installate in siti remoti. Si verificano errori inevitabilmente imprevisti, da NullReferenceExceptions a "Errori di rete generali". Quindi vanno dagli errori del programmatore ai problemi ambientali.

Attualmente tutte queste eccezioni non gestite vengono registrate utilizzando log4net e quindi inviate via email a noi per l'analisi . Tuttavia, abbiamo riscontrato che a volte questi "rapporti" di errore contengono troppe informazioni per identificare il problema.

In questi rapporti abbiamo bisogno di informazioni come ad esempio:

  1. Nome applicazione
  2. Versione applicazione
  3. Workstation
  4. Forse una schermata
  5. Dettagli eccezione
  6. Sistema operativo
  7. RAM disponibile
  8. processi in corso
  9. e così via ...

non voglio davvero di re-inventare la ruota con lo sviluppo di questo da zero. I componenti che sono necessari:

  1. raccolta Errore (dettagli come detto sopra)
  2. errore 'mittente' (accodamento necessario se DB o Internet non è disponibile)
  3. database di errore
  4. analisi e la segnalazione di questi errori . Per esempio. 10 errori o timeout più frequenti si verificano tra le 16:00 e le 17:00. Come si confrontano gli errori tra la versione x e y?

Nota: abbiamo guardato SmartAssembly come una possibile soluzione, ma anche se vicino non ha del tutto soddisfatto le nostre esigenze e speravo di sentire ciò che gli altri sviluppatori fanno e se esistono alcune alternative.

Modifica: Grazie per le risposte finora. Forse non ero chiaro nella mia domanda iniziale, il problema non è come catturare tutte le eccezioni non gestite, ma piuttosto come gestirle e creare un motore di reporting (analisi) attorno a loro.

+0

Ciao, mi interessa che cosa era che significava che SmartAssembly non riusciva a soddisfare I tuoi bisogni? –

risposta

5

Suggerirei l'articolo di Jeff Atwood su User Friendly Exception Handling, che fa la maggior parte di ciò che chiedi già (informazioni sull'applicazione, schermate, dettagli di eccezioni, sistema operativo, accesso ai file di testo e invio tramite e-mail) e contiene il codice sorgente in modo da aggiungere roba extra di cui hai bisogno.

+0

Grazie a questo passo nella giusta direzione. Ho letto l'articolo e fornisce una soluzione a parte del problema (raccolta degli errori). Come hai detto, ha bisogno di lavoro per le nostre esigenze specifiche, ma almeno fornisce un calcio d'inizio. Spero che esista qualcos'altro per analizzare questi errori. –

2

È possibile allegare all'evento di eccezione non gestito e registrarlo/premere un servizio Web/ecc.

[STAThread] 
static void Main() 
{ 
    Application.ThreadException += new ThreadExceptionEventHandler(OnUnhandledException); 
    Application.Run(new FormStartUp()); 
} 
static void OnUnhandledException(object sender, ThreadExceptionEventArgs t) 
{ 
    // Log 
} 

ho trovato anche questo frammento di codice utilizzando AppDomain invece di ThreadException:

static class EntryPoint { 
    [MTAThread] 
    static void Main() { 
     // Add Global Exception Handler 
     AppDomain.CurrentDomain.UnhandledException += 
      new UnhandledExceptionEventHandler(OnUnhandledException); 

     Application.Run(new Form1()); 
    } 

    // In CF case only, ALL unhandled exceptions come here 
    private static void OnUnhandledException(Object sender, 
     UnhandledExceptionEventArgs e) { 
     Exception ex = e.ExceptionObject as Exception; 
     if (ex != null) { 
      // Can't imagine e.IsTerminating ever being false 
      // or e.ExceptionObject not being an Exception 
      SomeClass.SomeStaticHandlingMethod(ex, e.IsTerminating); 
     } 
    } 
} 

Ecco alcuni documenti su di esso: AppDomain Unhandled Exception

di fuori del proprio gestire da soli, non c'è davvero un modo generico per fare ciò che è riutilizzabile, ha davvero bisogno di essere integrato con l'interfaccia dell'applicazione in modo corretto, ma è possibile impostare un servizio web che richiede nome dell'applicazione, eccezione e tutte quelle cose buone e avere un punto centralizzato per tutti le tue app.

0

È possibile studiare la funzionalità di segnalazione degli errori incorporata in Jet2Drag Omea Reader. Ha un componente catch-all di gestione degli errori che apre una finestra di dialogo quando si verifica un errore imprevisto. L'utente può inserire ulteriori dettagli prima di inoltrare il problema al servizio web di raccolta degli errori pubblici di JetBrain.

Fecero Omea open source per consentire alla Comunità di aggiornare la base di .NET 1.1 codice per V2 o 3. http://www.jetbrains.net/confluence/display/OMEA/this+link

Problemi correlati