Что происходит при использовании try / catch:
Это не имеет ничего общего с log4net, но вы поймали исключение.
Если вы этого не сделаете, исключение будет передаваться через стек до тех пор, пока что-то его не перехватит или не попадет в глобальный обработчик.
Если вы do поймаете его в своем коде, он остановится на этом. Он будет считаться «обработанным», и после блока захвата поток управления продолжится.
Таким образом, ваш механизм отчетов не «видит», что было исключением, потому что вы ловите его до того, как оно достигнет места, где механизм его поймает.
Как заставить двигатель узнавать об исключении:
Вам необходимо отбросить исключение:
catch(Exception ex){
Log.error("unable to click");
Console.WriteLine(ex.StackTrace);
throw;
}
тогда он будет пузыриться как обычно. Поймать его останавливает дальнейшее образование пузырей - потому что ожидается, что он будет обработан соответствующим образом в блоке захвата. Если вы используете блок catch только для регистрации, вам нужно снова выдать то же исключение.
Mind: Существует разница между throw;
и throw ex;
. Они будут производить разные стековые трассы. throw;
сохранит трассировку стека, а throw ex
сбросит ее.
(см. https://stackoverflow.com/a/730255/982149)