Начиная отсюда всё очень уж сложно. Досточно написать что-то такое:

```java
Throwable thrown = null;
try { returnValue = method.invoke(); }
catch (Throwable e) { thrown = e; }

try {
  // logging
} catch (Throwable e) { }

if (thrown != null) {
  throw thrown;
}

return returnedValue;
```