Aktualnie używam log4net w mojej aplikacji ASP.NET MVC do rejestrowania wyjątków. Sposób, w jaki to robię, polega na tym, że wszystkie moje kontrolery dziedziczą z klasy BaseController. W przypadku, gdy BaseController za OnActionExecuting, loguję żadnych wyjątków, które mogły wystąpić:Błędy rejestrowania w środowisku ASP.NET MVC
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
// Log any exceptions
ILog log = LogManager.GetLogger(filterContext.Controller.GetType());
if (filterContext.Exception != null)
{
log.Error("Unhandled exception: " + filterContext.Exception.Message +
". Stack trace: " + filterContext.Exception.StackTrace,
filterContext.Exception);
}
}
Działa to doskonale, jeśli Wystąpił nieobsługiwany wyjątek podczas działania kontrolera.
chodzi o 404 błędów, mam błąd niestandardowy zestaw w moim web.config tak:
<customErrors mode="On">
<error statusCode="404" redirect="~/page-not-found"/>
</customErrors>
A w akcji kontrolera, który zajmuje się "page-not-found" url, I logowaniu wymagany oryginalny adres URL:
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult PageNotFound()
{
log.Warn("404 page not found - " + Utils.SafeString(Request.QueryString["aspxerrorpath"]));
return View();
}
To też działa.
Problem, który mam, to sposób rejestrowania błędów znajdujących się na stronach .aspx. Powiedzmy, że mam błąd kompilacji na jednej ze stron lub jakimś kodem inline że rzuci wyjątek:
<% ThisIsNotAValidFunction(); %>
<% throw new Exception("help!"); %>
Wydaje się, że atrybut HandleError jest poprawnie przekierowanie to na mojej stronie Error.aspx w folderze udostępnionym ale zdecydowanie nie jest przechwycony przez moją metodę OnActionExecuted BaseController. Pomyślałem, że mógłbym umieścić kod logowania na samej stronie Error.aspx, ale nie jestem pewien, jak odzyskać informacje o błędzie na tym poziomie.
+1 dla ELMAH. Oto samouczek [ELMAH] (http://blog.elmah.io/elmah-tutorial/), który napisałem, aby pomóc Ci zacząć. Pamiętaj także o używaniu pakietu [Elmah.MVC] (https://www.nuget.org/packages/Elmah.MVC/) podczas korzystania z ASP.NET MVC, aby uniknąć problemów z niestandardowymi stronami błędu itp. – ThomasArdal
Jest kilka produktów tam, które będzie rejestrować wszystkie błędy występujące w aplikacjach .NET. Nie są tak niskiego poziomu, jak ELMAH czy log4net, ale oszczędzają mnóstwo czasu, jeśli próbujesz monitorować i diagnozować błędy: [Bugsnag] (https://docs.bugsnag.com/platforms/dotnet/ asp-net /) i [AirBrake] (https://airbrake.io/languages/net_bug_tracker) to dwa z tych, które znam .NET –