2009-12-15 17 views
9

esiste un framework di segnalazione degli errori che si suggerisce di utilizzare in .net. Ho bisogno di possibilità come la segnalazione via e-mail con fileappending alla posta elettronica. L'utente dovrebbe avere la possibilità di aggiungere informazioni al report e dovrebbe anche avere la possibilità di rimuovere i file di report, cioè se contengono dati critici per la privacy. Dovrebbe anche esserci la possibilità di prendere uno screenshot automatico. Il framework necessario dovrebbe includere anche un resoconto di segnalazione degli errori. Dovrebbe darmi la possibilità di creare i propri suggerimenti per la segnalazione degli errori.Framework di segnalazione degli errori per .net

Io uso già log4net, ma non è possibile, per quanto ne so, mostrare una GUI per la segnalazione degli errori all'utente.

Sarebbe bello se ci sono dei consigli,

Saluti, Martin

+1

Vedi anche http://stackoverflow.com/questions/49224/good-crash-reporting-library-in-c –

+0

Visual Studio Application Insights è quello che ti serve! https://azure.microsoft.com/en-us/documentation/articles/app-insights-windows-desktop/ – smedasn

risposta

5

Hai provato Elmah? Fa tutti gli elementi di gestione degli errori di cui stai parlando. Potresti guardare allo Trac per i bit che attaccano il bug che vuoi.

Gentilezza,

Dan

1

Controllare il Enterprise Library, si dispone di una registrazione e un registro di applicazione di gestione delle eccezioni completamente configurabile ed estensibile.

4

mi è familiare con la "Enterprise Library Microsoft Logging Block" e "Log4Net" e due di questi inserire nel vostro requisiti (avere più listener di log) Ecco una pagina che mette a confronto questi due: http://weblogs.asp.net/lorenh/archive/2005/02/18/376191.aspx

+0

Uso già log4net, ma log4net ha la possibilità di creare una finestra di rapporto di arresto anomalo? Non è possibile generare la posta automatizzata con i file di log a causa di motivi di privacy. L'utente deve avere la possibilità di decidere se segnalare un incidente. – martin

1

Ci è Microsoft WER, tuttavia è necessario registrarsi a Winqual e la tua azienda deve avere un ID VeriSign. Troppe complicazioni per molte persone.

0

Microsoft Enterprise Library, l'ultima versione 4.1-October 2008 è ampiamente utilizzata per la gestione e la registrazione di eccezioni, tra le altre cose. C'è anche un simpatico builder GUI che modificherà il tuo file app.config o web.config.

3

Partenza il quadro di registrazione fatta da The Object Guy

+0

è stato denominato "Termite" e spostato in http://dotnetlog.theobjectguy.com/ – Lucas

0

È anche possibile provare log4net. Non sono sicuro riguardo l'email, comunque. Tuttavia, è estensibile. Inoltre puoi ottenere il codice sorgente!

+2

Ha affermato che utilizza già log4net. –

3

Red Gate ha un prodotto chiamato SmartAssembly che segnala gli errori. Non l'ho usato da solo, ma la compagnia ha una buona reputazione.

+0

Attenzione che non è possibile utilizzarlo nella pipeline di compilazione di Visual Studio online perché richiede l'installazione con chiave di licenza. Se puoi - inviami la soluzione a me :) –

4

Rotola il proprio gestore di eccezioni. Usa sotto il codice nella tua classe program.cs. Invierà automaticamente la posta quando si verifica un'eccezione.

using System; 
using System.Windows.Forms; 
using System.Net; 
using System.Net.Mail; 
using System.Threading; 

namespace ExceptionHandlerTest 
{ 
    static class Program 
    { 
     /// <summary> 
     /// The main entry point for the application. 
     /// </summary> 
     [STAThread] 
     static void Main() 
     { 
      Application.ThreadException += 
       new ThreadExceptionEventHandler(Application_ThreadException); 

      // Your designer generated commands. 
     } 

     static void Application_ThreadException(object sender, ThreadExceptionEventArgs e) 
     { 

      var fromAddress = new MailAddress("your Gmail address", "Your name"); 
      var toAddress = new MailAddress("email address where you want to receive reports", "Your name"); 
      const string fromPassword = "your password"; 
      const string subject = "exception report"; 
      Exception exception = e.Exception; 
      string body = exception.Message + "\n" + exception.Data + "\n" + exception.StackTrace + "\n" + exception.Source; 

      var smtp = new SmtpClient 
      { 
       Host = "smtp.gmail.com", 
       Port = 587, 
       EnableSsl = true, 
       DeliveryMethod = SmtpDeliveryMethod.Network, 
       UseDefaultCredentials = false, 
       Credentials = new NetworkCredential(fromAddress.Address, fromPassword) 
      }; 
      using (var message = new MailMessage(fromAddress, toAddress) 
      { 
       Subject = subject, 
       Body = body 
      }) 
      { 
       //You can also use SendAsync method instead of Send so your application begin invoking instead of waiting for send mail to complete. SendAsync(MailMessage, Object) :- Sends the specified e-mail message to an SMTP server for delivery. This method does not block the calling thread and allows the caller to pass an object to the method that is invoked when the operation completes. 
       smtp.Send(message); 
      } 
     } 
    } 
} 
+0

Questo è così buono, grazie! Vorrei poter accettare la tua risposta come corretta. L'ho usato nel mio progetto e funziona perfettamente. Ho scoperto se si cattura l'eccezione, quindi non chiama il rapporto di posta elettronica. Ma ho fatto una lezione e la chiamo in "try, catch", quindi l'utente riceve ancora un rapporto di errore visualy. – MiKE

+0

Mi piace la semplicità ma non mi piacciono le password codificate nei programmi, aperta agli abusi, dovrebbe essere un modo per concludere in modo che non possa essere facilmente visualizzata dall'assembly MSIL. – rolls

+1

@rolls Ho creato una libreria fuori da questo codice che non richiede email per SMTP ora. Utilizza il servizio Drdump per raccogliere arresti anomali. Puoi trovarlo su https://crashreporterdotnet.codeplex.com/ –

Problemi correlati