Ich benutze SignalR Hub in meiner MVC4-Anwendung. Ich habe ELMAH hinzugefügt, um alle Fehler zu behandeln. Das Problem ist, dass Fehler, die im Hub auftreten, nicht in ELMAH axd protokolliert werden. Gibt es eine Möglichkeit, es zu konfigurieren?So konfigurieren Sie ELMAH mit SignalR
14
A
Antwort
9
Sie müssen eine HubPipelineModule
hinzufügen und sicherstellen, dass Sie einen ApplicationName in Ihrem errorLog-Element festlegen. Sonst kann Elmah keinen Fehler protokollieren, da es keinen HttpContext oder einen AppName zum Anmelden hat .
<errorLog type="Elmah.SqlErrorLog, Elmah" applicationName="MyAppName" connectionStringName="myConnString" />
Die HubPipelineModule code I've used ist wie folgt:
public class ElmahPipelineModule : HubPipelineModule
{
private static bool RaiseErrorSignal(Exception e)
{
var context = HttpContext.Current;
if (context == null)
return false;
var signal = ErrorSignal.FromContext(context);
if (signal == null)
return false;
signal.Raise(e, context);
return true;
}
private static void LogException(Exception e, IHubIncomingInvokerContext invokerContext)
{
var context = HttpContext.Current;
ErrorLog el = ErrorLog.GetDefault(context);
el.Log(new Error(e));
}
protected override void OnIncomingError(Exception ex, IHubIncomingInvokerContext context)
{
var exception = ex;
if (ex is TargetInvocationException)
{
exception = ex.InnerException;
}
else if (ex is AggregateException)
{
exception = ex.InnerException;
}
if (!RaiseErrorSignal(exception))
LogException(exception, context);
}
}
Achten Sie darauf, das Modul an den Hub-Pipeline hinzufügen:
GlobalHost.HubPipeline.AddModule(new ElmahPipelineModule());
EDIT
SignalR 2+
Ich bemerkte, dass keine meiner SignalR-Ausnahmen in einem aktuellen Projekt, an dem ich gearbeitet habe, protokolliert wurden, und dass eine ArgumentNullException ausgelöst wird, wenn das ErrorSignal vom aktuellen Kontext abgerufen werden soll. Die folgende Methode behandelt diese Ausnahme ordnungsgemäß, sodass SignalR-Fehler erneut protokolliert werden.
Verwandte Themen
- 1. Konfigurieren ELMAH: Unbekanntes Config-Abschnitt Fehler
- 2. So konfigurieren Sie database_cleaner mit Rails
- 3. So konfigurieren Sie dynamische Routen mit Express.js
- 4. So konfigurieren Sie log4j mit einer Eigenschaftendatei
- 5. So konfigurieren Sie Parameter mit Zeitstempel
- 6. SignalR: So senden Sie Daten an IConnected.Connect()
- 7. So konfigurieren Sie Sublimelinter-Symbol?
- 8. Ist es möglich, ELMAH komplett im Code zu konfigurieren?
- 9. trimmen Sie die Fehlerdetails von ELMAH protokolliert
- 10. So entfernen Sie "Auth_Password" aus den ELMAH-Protokollen
- 11. Catching Exceptions in Hintergrund Threads mit Elmah
- 12. So konfigurieren Sie RockMongo für Mongo-ReplikatSet
- 13. Zugriff auf Elmah auf Produktionsserver mit Elmah MVC nicht möglich?
- 14. So konfigurieren Sie Schienen in Intellij Idea
- 15. MEAN.js - So konfigurieren Sie E-Mails
- 16. So konfigurieren Sie den Plug.Static ohne Phoenix
- 17. So konfigurieren Sie domänenspezifische Routen in Zuul
- 18. Express.js + Less: So konfigurieren Sie richtig
- 19. So konfigurieren Sie Apache für Proxy-Anfragen
- 20. So konfigurieren Sie "entityCacheStrategies" in spring4.3.x
- 21. Clientseitige Fehlerprotokollierung mit Elmah
- 22. Externe Konfigurationsdateien mit Elmah
- 23. Erste Schritte mit Elmah?
- 24. So konfigurieren Sie einen zusätzlichen Migrationsordner
- 25. So konfigurieren Sie StructureMap für verschiedene Importarten
- 26. So konfigurieren Sie HTTPS-Unterstützung in squid3
- 27. So konfigurieren Sie die Eclipse-XML-Formatierung?
- 28. So konfigurieren Sie Abfragecaching in EclipseLink
- 29. So konfigurieren Sie recovery.zookeeper.path. * Params korrekt?
- 30. So konfigurieren Sie den Titel des Alarmdialogs
Für alle anderen, die im letzten Schritt hängen bleiben, fügen Sie die letzte Zeile in die RegisterHubs-Klasse ein. Zum Beispiel: 'public static void Start() {RouteTable.Routes.MapHubs(); GlobalHost.HubPipeline.AddModule (new Shopperscape.Web.API.ElmahPipelineModule()); } ' – Chris
@Chris Funktioniert das für SignalR 1.x? –
@Giles - dieser Code ist für SignalR 1 – damienc88