Logování chyb v ASP.NET aplikacích
Uživatelsky srozumitelná chybová hlášení popsaná v předchozím článku jsou sice krásná věc, ale pokud se vzniklou chybou nebude zabývat tvůrce aplikace, jsou stejně k ničemu. Tentokrát vám předvedu několik způsobů, jak o vzniklých chybách aplikace informovat programátora nebo jejího správce.
V prostředí .NET Frameworku máme široký výběr, kam uložit informaci o chybovém stavu. Každý způsob má svoje specifika a možnosti použití:
- zaslání informace emailem
- zapsání informace do textového souboru
- zapsání informace do databáze
- zapsání informace do event logu stroje, na němž aplikace běží
O tom ,jak funguje zpracování výjimek v prostředí .NET Frameworku jsme již psali v článku Chybová hlášení v ASP.NET pod kontrolou. Po přečtení předchozího článku mi jistě dáte za pravdu, že nejvhodnější místo pro „logování“ chybových stavů je Application_Error
. Dříve, než se pustím do vlastního popisu logování chyb, pokusím se vám přiblížit, jaké informace se dají o vzniklé chybě zjistit.
Vlastnost | Popis |
---|---|
HelpLink | Odkaz na help vysvětlující chybu (lze nastavit) |
InnerException | Pokud byla výjimka vyvolána uvnitř klauzule catch obsahuje objekt, který odeslal běh aplikace do catch |
Message | Zpráva popisují vzniklou výjimku |
Source | Kdo chybu způsobil – například jméno aplikace (lze nastavit) |
StackTrace | Podrobnosti o volání metody sloužící k nalezení metod, která způsobila chybu |
TargetSite | Objekt reflexe v prostředí .NET popisují metodu, která vyvolá výjimku. |
Díky tomuto článku budete mít sadu funkcí, které snadno zapracujete do své aplikace.
Zasílání chyb emailem
Nebudu se zde zaobírat tím, jak poslat z prostření .NET Frameworku email, ale rovnou uvedu kód, který email odešle. Pokud náhodou nerozumíte tomu, jak odesílaní emailu funguje, dovolím si vás odkázat na článek Web-mail služba pomocí ASP.NET.
void SendErrrorByMail(Exception chyba)
{
MailMessage zprava = new MailMessage();
zprava.From = „ondrej.kopp@interval.cz“;
zprava.To = „ondrej.kopp@interval.cz“;
zprava.Subject = „Chyba v aplikaci“;
zprava.Body = chyba.ToString();
SmtpMail.SmtpServer = „localhost“;
SmtpMail.Send(zprava);
}
Výhodou tohoto řešení je možnost nechat si informace posílat jednoduše na mobilní telefon. Nevýhodou ovšem zůstává zaplněný mailbox, takže pokud vám virové spamy nestačí, klidně si tento způsob použijte.
Logování chyb do textového souboru
Nejméně vhodný způsob, ale kdo chce kam, pomozme mu tam. Následující příklad berte spíše jen jako ukázku, jak problém logování neřešit. Tento způsob poskytuje velice omezené možnosti následného zpracování logu (třídění podle času či typu), nehledě k tomu, že výsledný soubor bude velice rozsáhlý.
void WriteErrorToFile(Exception chyba)
{
string soubor = Server.MapPath(„logfile.log“);
string datumcas = DateTime.Now.ToShortDateString() + “ “ + DateTime.Now.ToLongTimeString();
string message = datumcas + „\n“ + chyba.ToString() + „\n\n\n“;
StreamWriter writer = new StreamWriter(soubor, true);
writer.WriteLine(message);
writer.WriteLine();
writer.Close();
}
Zápis chyb do event logu webového stroje
Vhodné řešení, pokud vaše aplikace běží na serveru, který si spravujete sami. Máte tak totiž jak chyby vlastního serveru ,tak chyby aplikací na něm provozovaných na jednom místě a kontrola event logu patří mezi základní činnosti každého administrátora serveru.
void WriteErrorToEventLog(Exception chyba)
{
EventLog ev = new EventLog(„Web Aplikace“);
ev.Source = chyba.Message;
if (!EventLog.SourceExists(ev.Source))
EventLog.CreateEventSource(ev.Source,“Web Aplikace“);
ev.WriteEntry(chyba.ToString(),EventLogEntryType.Error);
ev = null;
}
Pokud však použijete tento kód, zjistíte, že do EventLogu se nic nezapsalo. Je to proto, že účet, pod kterým ASP.NET aplikace běží, nemá povolen zápis do EventLog
. Návod, jak zápis povolit, najdete ve znalostní bázi Microsoftu. Řešení se liší podle prostředí, ve kterém pracujete, proto nemá smysl ho sem přepisovat.
Logování chyb do databáze
Logování chyb do databáze je podle mě tím nejlepším, co lze použít na hostingu. Ovšem řešení je o něco pracnější, jelikož si k němu musíte udělat i rozhraní, pomocí kterého si budete informace z databáze zobrazovat. Tvorba tohoto rozhraní sice zabere hodně času, na druhou stranu ale může poskytnout řadu nadstandardních funkcí, například přístup pomocí mobilních zařízení. Vzhledem k rozsáhlosti materiálu jsem se rozhodl toto řešení popsat v samostatném článku.
Chyba „404“ – logovat či nelogovat?
Toť otázka. V případě logování těchto chyb se vystavujete nebezpečí, že se stanete obětí vtipálka, který se snaží přistupovat na neexistující stránky. V opačné případě si však říkáte o problém, protože se o chybějící stránce či pouhém překlepu v URL nedozvíte. Osobně si myslím, že odladěná aplikace by tyto chyby neměla obsahovat v žádném případě a proto preferuji možnost programové volby, zda tyto chyby chci či nikoli. Ostatně, stejně tu zůstává log soubor IIS, kde se tyto chyby velice snadno odhalí.
Konečný výčet
Ve výčtu možností, kam logovat chybové stavy, jsem opomenul zmínit XML soubor. Tento způsob je podobný práci s databází a velmi intuitivní, takže by vám neměl dělat problémy. Pro další použití doporučuji vytvořit třídu, která bude obsahovat zde popisované metody. Získáte tak poměrně snadno dobrý nástroj pro analýzu chování aplikace.
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
9 nejzajímavějších doménových koncovek
19. srpna 2024 -
Umělá inteligence v IT
27. září 2023 -
Jak se chránit před podvody na internetu – část 1
8. října 2024 -
10 nejpopulárnějších programovacích jazyků a jejich využití
9. listopadu 2023
Nejnovější
-
Výkonný a kompaktní: ASOME Max Studio s výjimečným poměrem cena/výkon
11. listopadu 2024 -
Šokující data od Microsoftu: Kyberútoky rostou o stovky procent!
8. listopadu 2024 -
Chcete jedinečnou doménu? Objevte koncovky FOOD, MEME a MUSIC!
7. listopadu 2024 -
OpenAI představilo novou funkci ChatGPT Search
6. listopadu 2024