I have a query handler decorator which logs any exceptions:

```
public class QueryHandlerLogDecorator<TQuery, TResult> : IQueryHandler<TQuery, TResult>
    where TQuery : IQuery<TResult>
{
    private readonly IQueryHandler<TQuery, TResult> _handler;
    private readonly ILog _log;

    public QueryHandlerLogDecorator(IQueryHandler<TQuery, TResult> handler)
    {
       _handler = handler;
       _log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
    }

    public TResult Handle(TQuery query)
    {
        try
        {
             var result = _handler.Handle(query);

            _log.Info("Ok");

            return result;
        }
        catch (Exception ex)
        {
            _log.Error(ex.Message, ex);                

            throw new Exception(ex.Message);
        }
    }
}

```

Whilst the exception handling isn't the worst thing in the world, what it means is that I lose the type of the exception being thrown.

For example, if I throw `ApplicationException` lower down in the application, this is caught and rethrown as `Exception`.

How can I rethrow the exception being caught as the original type?