我正确设置了NLog,我知道它正在读取配置文件。
我有一个测试控制器操作:
public JsonResult Exception()
{
throw new Exception("This is a test exception thrown from TestsController. It should be logged and displayed in an error page from BaseController.OnException().");
}
public JsonResult Logging()
{
Log.Info("Logging test called from TestsController");
Log.Error("Logging test called from TestsController");
return Json("Called Log.Info and Log.Error.", JsonRequestBehavior.AllowGet);
}
我也登录了我的BaseController。
protected override void OnException(ExceptionContext filterContext)
{
if (filterContext.ExceptionHandled)
{
return;
}
var e = filterContext.Exception;
Log.Error(e, "BaseController.OnException caught exception: ");
var controllerName = (string)filterContext.RouteData.Values["controller"];
var actionName = (string)filterContext.RouteData.Values["action"];
var model = new HandleErrorInfo(e, controllerName, actionName);
filterContext.Result = new ViewResult
{
ViewName = "~/Views/Shared/Error.cshtml",
ViewData = new ViewDataDictionary<HandleErrorInfo>(model),
};
filterContext.ExceptionHandled = true;
}
当我在&#34; DEV&#34; / localhost中运行我的系统时,这一切都很完美。
当我将ASP.NET MVC项目发布到我的测试服务器时,除了登录OnException方法之外,所有日志记录都。通过显示错误视图,OnException方法可以正常工作。为什么呢?
我正在登录数据库,我可以在DEV和TEST中手动运行INSERT语句而不会出现任何问题。我的测试系统部署到IIS虚拟目录。
至于我使用OnException
的原因,这是另一个问题。
答案 0 :(得分:1)
这对我来说是个问题。不要注册 HandleErrorAttribute 。
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
// Logging was not working. Remove HandleErrorAttribute. Allows OnException to work.
// filters.Add(new HandleErrorAttribute());
filters.Add(new UpstreamAuthorizeAttribute());
}