c # Log4Net не регистрирует реальную линию, где происходит исключение - PullRequest
1 голос
/ 19 сентября 2019

У меня есть c# controller, и внутри метода у меня есть код с оператором try catch:

My controller имеет атрибут класса верхнего уровня LogAttribute:

public class LogAttribute : HandleErrorAttribute
{
    public ILogManager Logger { get; set; }

    public override void OnException(ExceptionContext filterContext)
    {
        Exception exception = filterContext.Exception;
        filterContext.ExceptionHandled = true;

        /* start log error */
        var logHelper = new Helpers.LogHelper (this.Logger);
        Guid errorUid = Guid.NewGuid();

        // call log4net
        logHelper.LogErrorString(errorUid, exception);
        /* end log error */
     }

}

[Log]
public class TestController 
{
   public JsonResult TestMethod(){

       try{

           //...some code here

           List<string> list = null;

           //Line 65 force expection Object reference not set to an instance of an object
           list.count(); 

       } 
       catch(Exception ex) {


           // ... do some code here

           throw ex; // Line 82
       }

      return null;
   }
}

Ведение журнала Log4Net работает нормально, но когда я отлаживаю сразу после catch и вижу Exception ex, я вижу, что строка StackTrace - это 65 в качестве строки исключения, иэто абсолютно правильно, потому что именно там произошло исключение.Но когда Log4Net регистрирует ошибку, она отображается в виде строк 82 , именно там я вручную выводю исключение.

** ОБНОВЛЕНИЕ **

Iтолько что проверил, что исключение StackTrace правильно в операторе Catch, но именно тогда, когда обработчик OnException атрибута MVC Log обнаруживает, что тогда stacktrace сбрасывается.Так же как и проблема метода OnException.

Любая подсказка?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...