Tag Archives: net

[ASP.NET MVC 3] elmah Integration

Abend liebe Leute 😉

Seit einiger Zeit entwickle ich nun schon verschiedene Intranetapplikationen unter Einsatz des ASP.NET MVC 3 Frameworks. Und da wir alle nur Menschen sind, machen wir bekanntlich auch Fehler…

Am Schlimmsten ist es dann, vom Kunden zu hören „Geht nicht!“. Als Entwickler ist man dann immer froh über Mitarbeit. Als zusätzliche Hilfe möchte ich euch heute zeigen, wie man elmah (Error Logging Modules and Handlers) in seine MVC-Applikation einbindet und konfiguriert.

Als erstes ladet ihr euch die Binaries unter dem oben angegebenen Link herunter (aktuell zum Zeitpunkt des Blogposts: v1.2 SP1). Entpackt diese in euer Libs-Verzeichnis eurer Solution (oder wo auch immer ihr die hinpackt 😉 ).

Fügt nun in eurem MVC-Projekt einen Verweis auf die Elmah.dll hinzu.

Folgendes in die web.config hinzufügen:


<configuration>

    <configSections>

        ...

        <sectionGroup name="elmah">

            <section name="errorLog" type="Elmah.ErrorLogSectionHandler, Elmah" requirePermission="false" />

            <section name="errorFilter" type="Elmah.ErrorFilterSectionHandler, Elmah" requirePermission="false" />

            <section name="security" type="Elmah.SecuritySectionHandler, Elmah" requirePermission="false" />

        </sectionGroup>

    </configSections>

    <elmah>

        <errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="~/Logs/Elmah" />

        <!-- Achtung! Erlauben des Remotezugriffs erfolgt auf eigene Gefahr! -->

        <!-- Infos: http://www.troyhunt.com/2012/01/aspnet-session-hijacking-with-google.html -->

        <!--<security allowRemoteAccess="1" />-->

    </elmah>

    ...

    <!-- für IIS < 7 -->

    <system.web>

        ...

        <httpHandlers>

            ...

            <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />

        </httpHandlers>

        <httpModules>

            ...

            <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />

        </httpModules>

    </system.web>

    <!-- für IIS >= 7 -->

    <system.webServer>

        ...

        <handlers>

            ...

            <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />

        </handlers>

        <modules runAllManagedModulesForAllRequests="true">

            ...

            <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />

        </modules>

    </system.web>

</configuration>

Wir sind nun fast fertig 😉 Wir legen uns nun noch einen eigenen ExceptionFilter an (unbehandelte Ausnahmen werden standardmäßig sowieso von Elmah geloggt)


using System.Web.Mvc;
using Elmah;

namespace Prunked.Net.Flt
{
    public class ElmahErrorFilter : IExceptionFilter
    {
        #region IExceptionFilter Members

        public void OnException(ExceptionContext context)
        {
            if (context.ExceptionHandled)
            {
                ErrorSignal.FromCurrentContext().Raise(context.Exception);
            }
        }

        #endregion
    }
}

und registrieren diesen in unserer Applikation (dazu die Global.asax.cs öffnen)


public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new ElmahErrorFilter());
    ...
}

Das sollte es schon gewesen sein. Am besten schaut ihr euch das Ergebnis einfach mal in eurer Entwicklungsumgebung unter http://localhost:<PORT>/elmah.axd an…

Grüße,

prunkster / [TF2CM] prunked