Cum înregistrați erori (excepții) în aplicațiile ASP.NET?

Caut cel mai bun mod de a înregistra erorile într-o aplicație ASP.NET. Vreau să primesc e-mailuri când apar erori în aplicația mea, cu informații detaliate despre Excepție și Cererea curentă.

În compania mea am folosit pentru a avea propriul ErrorMailer, captuind totul în aplicația Global.asax Application_Error. A fost "OK" dar nu foarte flexibilă și nici configurabilă.

Am trecut recent la NLog. Este mult mai configurabil, putem defini diferite ținte pentru erori, le putem filtra, le vom tampona (nu au încercat încă). Este o îmbunătățire foarte bună.

Dar am descoperit în ultima vreme că există un întreg Namespace în cadrul .Net pentru acest scop: System.Web.Management și poate fi configurat în secțiunea healthMonitoring de la web.config.

Ați lucrat vreodată cu monitorizarea sănătății? Care este soluția pentru înregistrarea erorilor?

0
fr hi bn
Am văzut și System.Web.Management, dar nu am folosit-o niciodată. Mi-ar plăcea să aud orice feedback despre dacă funcționează bine.
adăugat autor Ben Mills, sursa

7 răspunsuri

Echipa mea folosește log4net de la Apache. E destul de ușor și ușor de configurat. Cel mai bun lucru este că este complet configurabil din fișierul web.config, așa că, odată ce ai setul de coduri, poți schimba complet modul în care se face logarea doar prin schimbarea fișierului web.config.

Log4net suportă logarea la o mare varietate de locații - bază de date, e-mail, fișier text, jurnal de evenimente Windows etc. Echipa mea are configurația de a trimite informații detaliate despre eroare într-o bază de date și de a trimite un e-mail întregii echipe cu suficiente informații pentru a determina în ce parte a codului a apărut eroarea. Atunci știm cine este responsabil pentru acea bucată de cod și pot merge la baza de date pentru a obține informații mai detaliate.

0
adăugat

Am folosit obiectele de logare ale Bibliotecii Enterprise. Vă permite să aveți diferite tipuri de înregistrare (fișier plat, e-mail și/sau bază de date). Este destul de personalizabil și are o interfață destul de bună pentru actualizarea web.config-ului pentru configurarea înregistrării. De obicei, îmi sun de logare de la On Error în Global.asax.

Iată un link către MSDN

0
adăugat
Am fost nevoit să folosesc logarea MS Enterprise Library pentru un proiect cu aproximativ un an în urmă. A fost foarte complicat și, nu-mi amintesc detaliile exacte, dar lipsea niște funcționalități minime pe care le-am putea aștepta într-o soluție de logare. Există un add-in pentru Visual Studio, care este despre singura modalitate de a obține configurarea corectă a web.config. Acest instrument transformă web.config-ul dvs. și șterge toate comentariile din el :(
adăugat autor TechSavvySam, sursa

Folosim o logare personalizata pe care am scris-o. Vă cere să implementați logarea pe cont propriu oriunde aveți nevoie. Dar, de asemenea, vă permite să capturați mult mai mult decât excepția.

De exemplu, codul nostru ar arăta astfel:

Try
  Dim p as New Person()
  p.Name = "Joe"
  p.Age = 30
Catch ex as Exception
  Log.LogException(ex,"Err creating person and assigning name/age")
  Throw ex
End Try

În acest fel, loggerul nostru va scrie toate informațiile de care avem nevoie într-o bază de date SQL. Avem alerte de e-mail configurate la nivelul DB pentru a căuta anumite erori sau erori frecvente. Aceasta ne ajută să identificăm exact de unde provin erorile.

Poate că nu este exact ceea ce căutați. O altă abordare asemănătoare cu utilizarea Global.asax este pentru noi o tehnică de injectare a codului, cum ar fi AOP cu PostSharp . Aceasta vă permite să injectați cod personalizat la începutul și la sfârșitul fiecărei metode sau la fiecare excepție. Este o abordare interesantă, dar cred că poate avea o mare performanță deasupra capului.

0
adăugat

Eu folosesc elmah . Are câteva caracteristici foarte bune și aici este un articol CodeProject . Cred că echipa StackOverflow folosește și Elmah!

0
adăugat
Am scris anul trecut un ELMAH Tutorial , care cred că descrie acest scenariu mai detaliat decât Articol CodeProject.
adăugat autor ThomasArdal, sursa

Folosesc log4net și unde vreodată aștept o excepție pe care o înregistrez la nivelul corespunzător. Am tendința de a nu arunca o excepție, deoarece nu permite într-adevăr o experiență de utilizare așa de frumoasă, există mai puține informații pe care le puteți furniza la starea actuală.

Vreau ca Application_Error să fie configurat să captureze orice excepție care nu era așteptată și eroarea este înregistrată ca o prioritate Fatal prin log4net (bine, 404 sunt detectate și înregistrate ca Info, deoarece acestea nu sunt atât de severe).

0
adăugat

Utilizăm EnterpriseLibrary.ExceptionHandling.Logging. Îmi place puțin mai mult decât log4net, deoarece nu numai că controlam logarea complet, dar putem controla și decizia Throw/NoThrow în config.

0
adăugat

Am folosit Log4net , configurat pentru a trimite prin e-mail detalii despre erorile fatale. De asemenea, este configurat să se înregistreze totul într-un fișier jurnal, ceea ce este de neprețuit atunci când încercați să depanați problemele. Celălalt beneficiu este că, dacă această funcționalitate standard nu face ceea ce doriți, este destul de ușor să scrieți un appender personalizat care să poată procesa informațiile de înregistrare după cum este necesar.

Acestea fiind spuse, folosesc acest lucru în tandem cu un handler de eroare personalizat, care trimite un e-mail html cu puțin mai multe informații decât este inclus în e-mailurile standard - log4net, variabilele de sesiune, cookie-urile, variabilele serverului http etc.

Acestea sunt ambele cablate în evenimentul Application_OnError, unde excepția este înregistrată ca o excepție fatală în log4net (care apoi o face să fie trimisă prin e-mail la o adresă de e-mail specificată) și, de asemenea, manipulată utilizând un handler de eroare personalizat.

Ați auzit mai întâi despre Elmah din intrarea blogului Coding Horror, Crash Responsibly și, deși pare promițător, încă nu am implementat niciun proiect.

0
adăugat
+1 Nu s-ar fi putut spune mai bine eu însumi!
adăugat autor Dillie-O, sursa