У меня есть 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
.
Любая подсказка?