Bestimmen Sie, ob nicht ELMAH aktiviert ist?
Frage
Wie kann ich feststellen, ob programmatisch oder nicht ELMAH aktiviert ist?
Lösung
Denn:
kann ELMAH dynamisch eine hinzugefügt werden ASP.NET Web-Anwendung ausgeführt wird, oder auch alle ASP.NET Web-Anwendungen, die auf einem Maschine, ohne dass Neukompilierung oder Umschichtung.
Sie sollten müssen nicht erkennen, ob es vorhanden ist. Schreiben Sie einfach Ihren Logging-Code, als ob es vorhanden war, und wenn es nicht ist, wird nichts protokolliert.
Von Interesse ?: Wie ELMAH zur Arbeit mit ASP.NET MVC [Handle] Attribut bekommen? (akzeptierte Antwort von ELMAH des Autors)
Andere Tipps
Sie können alle geladenen Module aufzählen (via Httpapplication .Modules ) und wenn Elmah Modul vorhanden ist, dann wird Elmah aktiviert:
foreach (var m in Application.Modules) {
if (m is Elmah.ErrorlogModule) {
// ...
}
}
Nicht sicher. Lassen Sie sich diese nicht treed.
Im Anschluss an Tadas' Antwort kam ich mit dem folgenden Code auf das funktioniert für mich (man beachte, dass ich das von VB übersetzt haben, ohne zu überprüfen, ob es kompiliert, so YMMV):
bool foundElmah = false;
foreach (var m in HttpContext.Current.ApplicationInstance.Modules) {
var module = HttpContext.Current.ApplicationInstance.Modules.Item(m);
if (module is Elmah.ErrorLogModule || module is Elmah.ErrorMailModule || module is Elmah.ErrorFilterModule || module is Elmah.ErrorTweetModule) {
foundElmah = true;
break;
}
}
if (foundElmah) {
// do something here, like populate the application cache so you don't have to run this code every time
return true;
} else {
// store in application cache, etc.
return false;
}
Dies wird auch um die Probleme, die ich mit dem Erhalt einer 401-Antwort hatte, als elmah.axd anfordert (I wurde unter Verwendung von Windows-Authentifizierung) und ist viel schneller, und nicht einen bestimmten Standort für elmah.axd nehmen.