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>
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");
