Я не разработчик на C ++, но в коде C # мы создали исключение для базового класса для нашей платформы, а затем записали исключение, выданное конструктором:
public FrameworkException(string message, Exception innerException)
: base(message, innerException)
{
log.Error(message, innerException);
}
...
Любое производное исключение просто должно вызвать его базовый конструктор, и мы постоянно ведем логирование исключений. Ничего страшного, но полезно.