Как записать необработанное исключение с NLog в ASP.NET MVC - PullRequest
2 голосов
/ 07 октября 2019

В моем проекте ASP.NET MVC у меня есть действие с атрибутом [LogErrors], как показано ниже:

[LogErrors]
public ActionResult Index()
 {
    var i = 0;
    var c = 10 / i;
    return View();
 }

Я сделал необработанное исключение без trycatch (делим 10 на 0) в этом действии, и я долженЗаписать это исключение ошибка текст , а также записать, какое действие произошло это исключение в текстовом файле с NLog. Я сделал [LogErrors] , как показано ниже:

 public class LogErrorsAttribute : FilterAttribute, IExceptionFilter
{
    void IExceptionFilter.OnException(ExceptionContext filterContext)
    {
        if (filterContext != null && filterContext.Exception != null)
        {
            string controller = filterContext.RouteData.Values["controller"].ToString();
            string action = filterContext.RouteData.Values["action"].ToString();
            string loggerName = string.Format("{0}Controller.{1}", controller, action);

            NLog.LogManager.GetLogger(loggerName).Error(string.Empty, filterContext.Exception);
        }
    }
}

, а мой NLog.config такой, как показано ниже:

 <?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd" >
  <targets>
    <target name="file" xsi:type="File" fileName="C:\Logs\${shortdate}.log"
       layout="
--------------------- ${level} (${longdate}) ----------------------${newline}
IP: ${aspnet-request-ip}${newline}
Call Site: ${callsite}${newline}
${level} message: ${message}${newline}
Id: ${activityid}${newline}
aspnet-sessionid: ${aspnet-sessionid}${newline}
aspnet-request-method: ${aspnet-request-method}${newline}
aspnet-request-host: ${aspnet-request-host}${newline}
aspnet-request-form: ${aspnet-request-form}${newline}
aspnet-request-cookie: ${aspnet-request-cookie}${newline}
aspnet-request: ${aspnet-request:serverVariable=HTTP_URL}${aspnet-request:queryString}${newline}
aspnet-mvc-controller: ${aspnet-mvc-controller}${newline}
aspnet-mvc-action: ${aspnet-mvc-action}${newline}
aspnet-appbasepath: ${aspnet-appbasepath}${newline}
              " encoding="UTF8"/>
  </targets>
  <rules>
    <logger name="*" minlevel="Trace" writeTo="file" />
  </rules>
</nlog>

Как исправить мои конфиги для регистрации этого исключениятекст ошибки и еще лог что в каком действии произошло это исключение в текстовом файле? Любая помощь будет оценена!

1 Ответ

1 голос
/ 07 октября 2019

Вам необходимо отправить сообщение на .Error и отправить Exception в качестве первого параметра.

В противном случае оно примерно переводится на string.Format("", filterContext.Exception).

Так что-то вроде этого:

NLog.LogManager.GetLogger(loggerName)
               .Error(filterContext.Exception, "Unhandled exception in controller");

Если это не помогает, обратитесь к руководству по устранению неполадок NLog

...