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

Aby poprawnie zapisać błędy występujące 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 bibolioteki Elmah instalowanej przez użytkowników na własną rękę. Poniższy opis przedstawia w jaki sposób należy uaktualnic plik web.config aby włączyć logowanie błędów do plików XML lub bazy danych SQLite:

<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 TYP LOGOWANIA BŁĘDÓW. NIEZALEŻNIE OD TYPU LOGOWANIA NALEŻY KATALOGOWI App_Data NADAĆ POZWOLENIE DO ZAPISU Z POZIOMU MENEDŻERA PLIKÓW W PANELU ZARZĄDZANIA KONTEM HOSTINGOWYM --> 
        <!-- 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
        <!-- PONIŻSZY WPIS NALEŻY DODAC W TEJ SEKCJI WYŁĄCZNIE JEŚLI WYKORZYSTYWANA JEST BAZA DANYCH SQLite--> 
        <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
            ... 
            <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,runtimeVersionv2.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 gdy aplikacja wykorzystuje .NET Framework 4.0 sekcja system.webServer / handlers powinna zawierac uaktualniony wpis:

<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>


Po uaktualnieniu pliku web.config (linijki zawierające "..." oznaczają pozostałe wpisy znajdujące sie w pliku konfiguracyjnym) należy utworzyć katalog App_Data w głównym katalogu witryny, a wszystkie zapisane błędy będa widoczne pod adresem:
http://DOMENAWITRYNY/WebioElmah.axd

Aby uniemożliwić podgląd ww. strony należy zmienic jedną wartość w powyższej 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");


Article ID: 19, Created On: 3/26/2010, Modified: 2/15/2011