Ich muss den App-Namen basierend auf der Konfiguration ändern, die ich in Visual Studio verwende. Wenn ich zum Beispiel in der Debug-Konfiguration bin, möchte ich, dass der App-Name im Anwendungsfeld in der Elmah_Error-Tabelle als 'App_Debug' angezeigt wird. Hat jemand damit Erfahrung? Oder gibt es einen anderen Weg, es zu tun?Gibt es eine Möglichkeit, den Anwendungsnamen in Elmah programmgesteuert festzulegen?
Antwort
Standardmäßig verwendet Elmah die Anwendungs-GUID von AppPool als Standardanwendungsname. Es verwendet dies als Schlüssel, um die Fehler in der Elmah_Error-Tabelle zu identifizieren, wenn Sie die Webschnittstelle betrachten, die über das HTTP-Modul erstellt wurde.
Ich wurde beauftragt, diese Option für meine Firma in diesem Jahr zu erkunden. Ich konnte keine Möglichkeit finden, dies standardmäßig zu manipulieren, da Elmah den Anwendungsnamen von HttpRuntime.AppDomainAppId
in der Datei ErrorLog.cs zieht. Du könntest es mit jedem beliebigen Schlüssel manipulieren; Dies ist jedoch die GUID des AppPools.
Mit diesem gesagt, war ich in der Lage, die ErrorLog.cs-Datei zu manipulieren, um Elmah in ein aufrufbares Framework anstelle von einem handlerbasierten Framework zu verwandeln und mir erlauben, den ApplicationName zu setzen. Was ich am Ende tun ErrorLog.cs wurde Modifizieren einer Eigenschaft enthalten, die mir den Namen, wie unten abgebunden:
public virtual string ApplicationName
{
get
{
if (_applicationName == null) { _applicationName = HttpRuntime.AppDomainAppId; }
return _applicationName;
}
set { _applicationName = value; }
}
Was werden Sie wahrscheinlich tun müssen, ist dies anders einzustellen und die Application nicht zu HttpRuntime.AppDomainAppId
gesetzt, aber stattdessen wird ein Wert aus der Datei "web.config" abgerufen. Alles in allem ist es möglich. Die Art und Weise, wie ich es gemacht habe, verbesserte die ErrorLog.Log(ex)
Methode, so dass ich Elmah verwenden konnte, hat ein aufrufbares Framework über Web-Anwendungen hinaus. Rückblickend wünschte ich, dass ich die App/web.config Annäherung stattdessen tat.
Eine Sache zu beachten, wenn Sie den Anwendungsnamen in Elmah ändern. Der HTTP-Handler, der die Schnittstelle /elmah/default.aspx generiert, funktioniert nicht mehr. Ich versuche immer noch, Zeit zu finden, um mich wieder zu solchen zu bewegen; Möglicherweise müssen Sie jedoch bei der Implementierung nach einer benutzerdefinierten Schnittstelle suchen.
Dies kann jetzt rein in Markup getan werden. Fügen Sie einfach ein applicationName
-Attribut zum errorLog
-Element im Abschnitt <elmah>
der Datei web.config hinzu. Beispiel:
<errorLog type="Elmah.SqlErrorLog, Elmah"
connectionStringName="connectionString" applicationName="myApp" />
Ich habe dies getestet und es funktioniert sowohl bei der eine Ausnahme Protokollierung und beim Betrachten des Protokolls über Elmah.axd
.
Im Fall des OP, könnte sich vorstellen, man es programmatisch zu festgelegt werden kann, aber ich, dass mich nicht getestet. Für mich und für die meisten Szenarien ist der Markup-Ansatz ausreichend.
Ziemlich gering zu beanstanden, aber ich mag dieses Muster besser: return _applicationName ?? (_applicationName = HttpRuntime.AppDomainAppId); –
In den gespeicherten Prozeduren in Elmahs Datenbank gibt es Filter für den Anwendungsnamen. Ich habe alle gespeicherten Prozeduren in meiner Umgebung geändert, um diesen Filter zu ignorieren, sodass ich alle Fehler in einer einzigen Konsole anzeigen kann. –