Vra

Ek is op soek na die beste manier om foute in 'n ASP.NET-toepassing aan te teken.Ek wil e-posse kan ontvang wanneer foute in my aansoek voorkom, met gedetailleerde inligting oor die uitsondering en die huidige versoek.

In my maatskappy het ons ons eie ErrorMailer gehad, wat alles in die Global.asax Application_Error opgevang het.Dit was "Ok" maar nie baie buigsaam of konfigureerbaar nie.

Ons het onlangs oorgeskakel na NLog.Dit is baie meer konfigureerbaar, ons kan verskillende teikens vir die foute definieer, dit filter, dit buffer (nog nie probeer nie).Dit is 'n baie goeie verbetering.

Maar ek het onlangs ontdek dat daar 'n hele naamruimte in die .Net-raamwerk is vir hierdie doel: Stelsel.Web.bestuur en dit kan gekonfigureer word in die gesondheidsmonitering afdeling van web.config.

Het jy al ooit met .Net-gesondheidsmonitering gewerk?Wat is jou oplossing vir foutmelding?

Was dit nuttig?

Oplossing

ek gebruik elmah.Dit het 'n paar baie mooi kenmerke en hier is 'n Kodeprojek artikel daaroor.Ek dink die StackOverflow-span gebruik ook elmah!

Ander wenke

Ek het al gebruik Log4net, gekonfigureer om besonderhede van noodlottige foute te e-pos.Dit is ook opgestel om alles in 'n loglêer aan te teken, wat van onskatbare waarde is wanneer u probleme probeer ontfout.Die ander voordeel is dat as daardie standaardfunksie nie doen wat jy wil hê dit moet nie, is dit redelik maklik om 'n pasgemaakte aanhanger te skryf wat die aantekeninligting kan verwerk soos benodig.

Dit gesê, ek gebruik dit in tandem met 'n pasgemaakte fouthanteerder wat 'n HTML-e-pos met 'n bietjie meer inligting uitstuur as wat in die standaard log4net-e-posse ingesluit is - bladsy, sessieveranderlikes, koekies, http-bedienerveranderlikes, ens.

Hierdie is beide bedraad in die Application_OnError-gebeurtenis, waar die uitsondering aangeteken word as 'n noodlottige uitsondering in log4net (wat dan veroorsaak dat dit per e-pos na 'n gespesifiseerde e-posadres gestuur word), en ook hanteer word deur die pasgemaakte fouthanteerder.

Eerste van gehoor Elmah van die Coding Horror bloginskrywing, Crash Verantwoordelik, en alhoewel dit belowend lyk, moet ek dit nog enige projekte implementeer.

Ek het die Enterprise Library se Logging-objekte gebruik.Dit laat jou toe om verskillende tipes aanteken (platlêer, e-pos en/of databasis) te hê.Dit is redelik aanpasbaar en het 'n redelik goeie koppelvlak vir die opdatering van jou web.config vir die konfigurasie van die logboek.Gewoonlik bel ek my logging vanaf die On Error in die Global.asax.

Hier is 'n skakel na die MSDN

Ek gebruik log4net en waar ek ook al verwag 'n uitsondering ek teken dit aan op die toepaslike vlak.Ek is geneig om nie die uitsondering weer te gooi nie, want dit laat nie regtig so lekker gebruikerservaring toe nie, daar is minder inligting wat u in die huidige toestand kan verskaf.

Ek sal Application_Error ook gekonfigureer hê om enige uitsondering op te vang wat nie verwag is nie en die fout word aangeteken as 'n noodlottige prioriteit deur log4net (wel, 404's word opgespoor en aangeteken as Info aangesien hulle nie so ernstig is nie).

My span gebruik log4net van Apache.Dit is redelik liggewig en maklik om op te stel.Die beste van alles, dit is heeltemal konfigureerbaar vanaf die web.config-lêer, so sodra jy die hakies in jou kode-opstelling het, kan jy die manier waarop aanteken gedoen word heeltemal verander deur net die web.config-lêer te verander.

log4net ondersteun aanteken na 'n wye verskeidenheid liggings - databasis, e-pos, tekslêer, Windows-gebeurtenislogboek, ens.My span het dit opgestel om gedetailleerde foutinligting na 'n databasis te stuur, en ook 'n e-pos aan die hele span te stuur met genoeg inligting sodat ons kan bepaal in watter deel van die kode die fout ontstaan ​​het.Dan weet ons wie verantwoordelik is vir daardie stukkie kode, en hulle kan na die databasis gaan om meer gedetailleerde inligting te kry.

Ek het onlangs 'n asp.net-webdiens met NLog gebou, wat ek vir al my rekenaartoepassings gebruik.Die aanteken werk goed wanneer ek in Visual Studio ontfout, maar sodra ek na IIS oorskakel, word die loglêer nie geskep nie;Ek het nog nie vasgestel hoekom nie, maar die feit dat ek na 'n oplossing moet soek, maak dat ek iets anders wil probeer vir my asp.net-behoeftes!

Ons gebruik EnterpriseLibrary.ExceptionHandling.Logging.Ek hou daarvan 'n bietjie beter as log4net, want nie net beheer ons die logging heeltemal nie, maar ons kan ook die Throw/NoThrow-besluit binne config beheer.

Ons gebruik 'n pasgemaakte tuisgemaakte logprogram wat ons geskryf het.Dit vereis dat jy aanteken op jou eie implementeer oral waar jy dit nodig het.Maar dit laat jou ook toe om baie meer as net die uitsondering vas te vang.

Ons kode sal byvoorbeeld soos volg lyk:

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

Op hierdie manier sal ons logger al die inligting wat ons benodig na 'n SQL-databasis skryf.Ons het e-poswaarskuwings opgestel op die DB-vlak om na sekere foute of gereelde foute te soek.Dit help ons om presies te identifiseer waar die foute vandaan kom.

Dit is dalk nie presies waarna jy soek nie.Nog 'n benadering soortgelyk aan die gebruik van Global.asax is vir ons 'n kode-inspuitingstegniek soos AOP met PostSharp.Dit laat jou toe om persoonlike kode aan die begin en einde van elke metode of op elke uitsondering in te spuit.Dit is 'n interessante benadering, maar ek glo dit kan 'n groot prestasie bokoste hê.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top