Obsługa błędów za pomocą modułu ELMAH

Do zapisywania błędów występujących w aplikacjach serwery IIS Webio mają domyślnie zainstalowany moduł ich logowania o nazwie ELMAH (http://code.google.com/p/elmah/) skompilowany w innej niż domyślna przestrzeni nazw (WebioElmah), po to aby nie zakłócać pracy biblioteki Elmah instalowanej przez użytkowników we własnym zakresie. Poniższy opis przedstawia w jaki sposób należy uaktualnić plik web.config, aby włączyć logowanie błędów do plików XML lub bazy danych SQLite. Moduł ten należy włączać tylko na czas jego używania.
 
 
 
 
W sekcji System kliknąć Menadżer plików.
 
 
W katalogu głównym witryny, utworzyć katalog App_Data. Kliknąć ikonę kłódki przy katalogu.
 
 
Nadać uprawnienia Zapisu dla aplikacji do katalogu i obiektów podrzędnych. Kliknąć Ustaw uprawnienia.
 
 
Uaktualnić plik web.config. Jego domyślna zawartość wygląda następująco (po utworzeniu nowej witryny):
 
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <directoryBrowse enabled="false" />
        <defaultDocument>
            <files>
                <clear />
                <add value="Default.aspx" />
                <add value="index.html" />
                <add value="index.htm" />
                <add value="index.php" />
                <add value="Default.htm" />
                <add value="Default.asp" />
                <add value="index.asp" />
                <add value="WebioDefault.aspx" />
            </files>
        </defaultDocument>
        <httpErrors errorMode="Detailed" existingResponse="PassThrough" />
    </system.webServer>
</configuration>
 
Dodajemy nowe sekcje i uzupełniamy już istniejące poniższym kodem. Na tym etapie należy wybrać metodę logowania błędów. W przypadku logowania błędów do bazy danych, dodać również sekcję <connectionStrings>. Trzy kropki w kodzie "..." oznaczają pozostałą część pliku web.config.
 
...
<configuration>
   
    <configSections>
        <sectionGroup name="webioelmah">
            <section name="security" requirePermission="false"
            type="WebioElmah.SecuritySectionHandler, WebioElmah,
            Version=1.1.11517.0,Culture=neutral, PublicKeyToken=93297c12d98e0131
" />
 
            <section name="errorLog" requirePermission="false"
            type="WebioElmah.ErrorLogSectionHandler, WebioElmah,
            Version=1.1.11517.0,Culture=neutral, PublicKeyToken=93297c12d98e0131
" />
        </sectionGroup>
    </configSections>
   
    <webioelmah>
        <security allowRemoteAccess="yes" />
        <!-- NALEŻY WYBRAĆ JEDEN Z PONIŻSZYCH WPISÓW ODPOWIEDZIALNYCH
        ZA TYP LOGOWANIA BŁĘDÓW:
-->
       
        <!-- WPIS DLA LOGOWANIA BŁĘDÓW DO PLIKÓW XML:-->
        <errorLog type="WebioElmah.XmlFileErrorLog, WebioElmah,
        Version=1.1.11517.0,Culture=neutral, PublicKeyToken=93297c12d98e0131
"
        logPath="~/App_Data" />  

        <!-- WPIS DLA LOGOWANIA BŁĘDÓW DO BAZY DANYCH SQLite:-->
        <errorLog type="WebioElmah.SQLiteErrorLog, WebioElmah,
        Version=1.1.11517.0,Culture=neutral, PublicKeyToken=93297c12d98e0131
"
        connectionStringName="WebioElmah.SQLite" />
    </webioelmah>
       
    <connectionStrings>
        <!-- WPIS TEN DODAĆ TYLKO, JEŚLI BŁĘDY BĘDĄ ZAPISYWANE W BAZIE DANYCH -->
        <add name="WebioElmah.SQLite" connectionString=
        "Data Source=~/App_Data/errors.s3db" />
    </connectionStrings>
  
    <system.web>
        <httpHandlers>
            <add verb="POST,GET,HEAD" path="WebioElmah.axd"
            type="WebioElmah.ErrorLogPageFactory, WebioElmah, Version=1.1.11517.0,
            Culture=neutral, PublicKeyToken=93297c12d98e0131
" />
        </httpHandlers>
        <httpModules>
            <add name="ErrorLog" type="WebioElmah.ErrorLogModule, WebioElmah,
            Version=1.1.11517.0, Culture=neutral, PublicKeyToken=93297c12d98e0131
" />
        </httpModules>
    </system.web>
   
    <system.webServer>
    ...
        <validation validateIntegratedModeConfiguration="false" />
        <handlers>
        <!-- W PRZYPADKU GDY APLIKACJA WYKORZYSTUJE .NET FRAMEWORK 2.0,
        NALEŻY UAKTUALNIĆ WARTOŚĆ Z
runtimeVersionv4.0 NA runtimeVersionv2.0-->
            <add name="WebioElmah.axd_POST,GET,HEAD" path="WebioElmah.axd"
            verb="POST,GET,HEAD" type="WebioElmah.ErrorLogPageFactory, WebioElmah,
            Version=1.1.11517.0, Culture=neutral,PublicKeyToken=93297c12d98e0131
"
            preCondition="integratedMode,runtimeVersionv4.0" />
        </handlers>
        <modules>
            <add name="ErrorLog" type="WebioElmah.ErrorLogModule, WebioElmah,
            Version=1.1.11517.0, Culture=neutral, PublicKeyToken=93297c12d98e0131
"
            preCondition="managedHandler" />
        </modules>
    ...
    </system.webServer>
</configuration>
 
W przypadku aplikacji MVC w pliku Globals.asax.cs należy usunąć lub zakomentować linię kodu:
 
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
// filters.Add(new HandleErrorAttribute());
}
 
Plik web.config nie może zawierać błędów składniowych. W naszym przypadku błędy będą zapisywane do plików XML. Po dodaniu powyższego kodu, zawartość pliku web.configprzedstawia się następująco:
 
<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <configSections>
        <sectionGroup name="webioelmah">
            <section name="security" requirePermission="false"
            type="WebioElmah.SecuritySectionHandler, WebioElmah,
            Version=1.1.11517.0,Culture=neutral, PublicKeyToken=93297c12d98e0131
" />
 
            <section name="errorLog" requirePermission="false"
            type="WebioElmah.ErrorLogSectionHandler, WebioElmah,
            Version=1.1.11517.0,Culture=neutral, PublicKeyToken=93297c12d98e0131
" />
        </sectionGroup>
    </configSections>
   
    <webioelmah>
        <security allowRemoteAccess="yes" />
        <errorLog type="WebioElmah.XmlFileErrorLog, WebioElmah,
        Version=1.1.11517.0,Culture=neutral, PublicKeyToken=93297c12d98e0131
"
        logPath="~/App_Data" />  

    </webioelmah>
    <system.web>
        <httpHandlers>
            <add verb="POST,GET,HEAD" path="WebioElmah.axd"
            type="WebioElmah.ErrorLogPageFactory, WebioElmah, Version=1.1.11517.0,
            Culture=neutral, PublicKeyToken=93297c12d98e0131
" />
        </httpHandlers>
        <httpModules>
            <add name="ErrorLog" type="WebioElmah.ErrorLogModule, WebioElmah,
            Version=1.1.11517.0, Culture=neutral, PublicKeyToken=93297c12d98e0131
" />
        </httpModules>
    </system.web>   
    <system.webServer>
        <directoryBrowse enabled="false" />
        <defaultDocument>
            <files>
                <clear />
                <add value="Default.aspx" />
                <add value="index.html" />
                <add value="index.htm" />
                <add value="index.php" />
                <add value="Default.htm" />
                <add value="Default.asp" />
                <add value="index.asp" />
                <add value="WebioDefault.aspx" />
            </files>
        </defaultDocument>
        <validation validateIntegratedModeConfiguration="false" />
        <handlers>
            <add name="WebioElmah.axd_POST,GET,HEAD" path="WebioElmah.axd"
            verb="POST,GET,HEAD" type="WebioElmah.ErrorLogPageFactory, WebioElmah,
            Version=1.1.11517.0, Culture=neutral,PublicKeyToken=93297c12d98e0131
"
            preCondition="integratedMode,runtimeVersionv4.0" />
        </handlers>
        <modules>
            <add name="ErrorLog" type="WebioElmah.ErrorLogModule, WebioElmah,
            Version=1.1.11517.0, Culture=neutral, PublicKeyToken=93297c12d98e0131
"
            preCondition="managedHandler" />
        </modules>
        <httpErrors errorMode="Detailed" existingResponse="PassThrough" />
    </system.webServer>
</configuration>
 
 
Następnie należy sprawdzić działanie modułu. Wpisać w przeglądarce adres:
http://DOMENAWITRYNY/WebioElmah.axd
Wyświetlenie się poniższej strony z logiem błędów (niezależnie czy błędy wystąpiły, czy też nie) oznacza, że ELMAH działa poprawnie.



Jeśli w aplikacji wystąpią błędy, zostaną one wyświetlone oraz zapisane do osobnych plików XML w katalogu App_Data. Aby sprawdzić ich szczegóły należy kliknąć Details.

Błędy


 
 
 Aby uniemożliwić podgląd z logiem błędów należy zmienic wartość w istniejącej konfiguracji:
 
<security allowRemoteAccess="no" />
 

Jeśli aplikacja jest napisana w ASP.NET MVC należy dodać do pliku Global.asax ścieżkę do ignorowania:
 
routes.IgnoreRoute("WebioElmah.axd");
 
Po zakończeniu korzystania z modułu wyłączamy go. Pozostawienie go włączonego na dłuższy czas może spowodować wygenerowanie wiele plików XML, co skutecznie może spowolnić działanie witryny.
 
  • 0 Klienci ocenili te informacje jako pomocne
Czy ta informacja była pomocna?

Podobne

Przekierowanie do non-WWW za pomocą URLRewrite (przykład: http://domena.pl)

W pliku web.config witryny dodać sekcję <rewrite>, a następnie uzupełnić ją poniższym kodem...

Sprawdzenie ustawień PHP

Wywołanie funkcji phpinfo() spowoduje wyświetlenie wszystkich ustawień PHP na serwerze dla danej...

Przekierowanie katalogu domeny głównej do poddomeny

Poniższa reguła przekierowuje katalog domeny głównej domena.pl/nazwa do poddomeny...

Instalacja lub odnowienie certyfikatu Let's Encrypt w przypadku witryny znajdującej się za CloudFlare

 W przypadku witryny znajdującej się za usługami CloudFlare, w celu możliwości instalacji...

Włączenie kompresji za pomocą mod_gzip

Kompresja GZIP przyspiesza ładowanie witryny dzięki skompresowaniu zawartości witryny jeszcze...