为什么NLog不能在Controller.OnException中工作?

时间:2018-01-11 17:01:14

标签: asp.net-mvc nlog

我正确设置了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的原因,这是另一个问题。

1 个答案:

答案 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());
    }