2013-03-12 8 views
8

Ich versuche, Ausnahmen von meinem asp.net Web-API-Projekt mit Elmah zu protokollieren. Ich habe ein Problem, bei dem jeder Fehler zweimal protokolliert wird.Fehler werden zweimal bei der Verwendung von Elmah mit WebApi protokolliert

I Elmah.Contrib.Web-Api und meine Anwendungsklasse verwenden ist wie folgt:

public class WebApiApplication : System.Web.HttpApplication 
{ 
    protected void Application_Start() 
    { 
     GlobalConfiguration.Configuration.Filters.Add(new ElmahHandleErrorApiAttribute()); 

     RouteTable.Routes.MapHubs(); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 

#if DEBUG 
     EntityFrameworkProfiler.Initialize(); 
#endif 

     GlobalConfig.CustomizeConfig(GlobalConfiguration.Configuration); 

    } 
} 

Wenn ich die folgende Zeile commment aus dann bekomme ich keine Nachrichten überhaupt:

GlobalConfiguration.Configuration.Filters.Add(new ElmahHandleErrorApiAttribute()); 

Und ich kann bestätigen, dass ich nur einen Fehler werfe und der Aufruf, der den Fehler erzeugt, wurde nur einmal aufgerufen und ich habe meine Controller oder Methoden nicht manuell mit dem Elmah-Attribut versehen.

Um zu versuchen und zu lösen dieses I Das Contrib-Paket entnommen und folgte den dieser das Problem nicht lösen, und es meldet sich noch zweimal http://www.tugberkugurlu.com/archive/asp-net-web-api-and-elmah-integration

hier Anleitung. Es erlaubte mir, einen Unterbrechungspunkt in die Attributklasse zu setzen und zu bestätigen, dass es für jeden Fehler zweimal aufgerufen wird.

Wie kann ich das lösen?

+1

Ist es möglich, dass in Ihrer Datei "web.config" 2 Elmah-Fehlerprotokolleinträge eingerichtet sind? – danludwig

+0

Ich habe es einfach überprüft, und nein es ist nur einmal drin. – Twisted

+0

Suchen Sie noch eine Antwort auf diese – Twisted

Antwort

3

Ich würde Ihre FilterConfig.cs-Klasse überprüfen, ist es möglich, dass das Standard-HandleErrorAttribute dort hinzugefügt wird und Ihre Ausnahme erneut wirft?

+1

Ich habe überprüft, und das ist es nicht – Twisted

0

Haben Sie this post gesehen? Der Autor verwendet einen ExceptionFilter, um Protokollierungsausnahmen zu behandeln.

+0

Ja, ich hatte diesen Beitrag gesehen – Twisted

4

Welche ELMAH-bezogenen Einträge befinden sich in Ihrer web.config?

Ich hatte ein ähnliches Problem in einer MVC-Anwendung - behandelte Ausnahmen wurden zweimal protokolliert. In der Anwendung verwende ich einen benutzerdefinierten Ausnahmefilter, um behandelte Ausnahmen zu ELMAH mit Fehlersignalisierung zu protokollieren, während das HTTP-Modul unbehandelte Ausnahmen behandelt.

Es stellte sich heraus, dass ich setzen benötigt: um

<add key="elmah.mvc.disableHandleErrorFilter" value="true" /> 

in web.config die integrierte Ausnahme Filter innerhalb des ELMAH.MVC NuGet Paket zu deaktivieren.

Der Quellcode für die eingebauten Filter zeigt, dass es behandeln Ausnahmen Protokolle: https://github.com/alexanderbeletsky/elmah-mvc/blob/master/src/Elmah.Mvc/HandleErrorAttribute.cs

+0

Danke, ich werde es versuchen und komm zu dir zurück – Twisted

+0

Nein Das war es nicht :-( – Twisted

3

Für was es wert ist, war ich das gleiche Problem von ELMAH mit jeder Ausnahme zweimal in meiner Web-API-Anwendung Anmeldung (unter Verwendung von Elmah.Contrib.WebApi).

meine ELMAH E-Mails gegen meine Quelle Geschichte Vergleich, ich war in der Lage zu erkennen, dass das Problem geschieht begonnen, nachdem das Ninject.Web.WebApi 3.0.2-unstable-9016-Paket über nuget installiert wurde.

Sicher genug, die Deinstallation des Pakets und das Auskommentieren der einzelnen Abhängigkeitsbindung, die es verwendete, löste das doppelte Ausnahmeprotokollierungsproblem. Das erneute Installieren des Pakets und das Verlassen der Abhängigkeits-Bindung, die auskommentiert wurde, verursachte das Problem, erneut zu starten, so dass es nicht die Bindung selbst war.

Die Installation der vorherigen Version (Ninject.Web.WebApi 3.0.2-unstable-8) verursachte nicht das Problem, aber meine Abhängigkeitsbindung funktionierte nicht mehr.

Ich wähle für den Augenblick mit dem Problem zu leben.

0

Für andere Leute mit der Protokollierung zweimal ausgeben (ich glaube nicht, das die OP hilft?) - das ist mir passiert und der Grund war, weil ich die Filter global

GlobalConfiguration.Configuration.Filters.Add(new ElmahErrorAttribute()); //log web api errors 

sondern auch angelegt hatte das Attribut zur Klasse (doh!)

[ElmahError] 
public class TestController : ApiController 

So natürlich loggte es zweimal.

0

Ich hatte dieses Problem nur auf HTTP 401 Antworten auftreten. Es stellte sich heraus, dass die Windows-Authentifizierung aktiviert war, was dazu führte, dass der Browser eine zweite Aushandlungsanfrage stellte.

In meinem Fall war ich nur in der Lage Windows-Authentifizierung in der web.config zu deaktivieren:

<security> 
    <authentication> 
    <windowsAuthentication enabled="false" /> 
    </authentication> 
</security> 

Hinweis: Wenn Sie entriegelt den Config Abschnitt nicht haben, können Sie einfach deaktivieren Windows-Authentifizierung in IIS.

Verwandte Themen