Я думаю, что использование трассировки стека будет намного более интуитивно понятным, чем любой идентификатор.
Что касается пользовательского исключения, почему бы не сделать это?
try
{
DoSth();
}
catch(Exception ex)
{
Util.Log(ex.Message, ex.StackTrace);
if(ex is OurException) throw ex;
else throw new OurException(ex); // use the original exception as the InnerException
}
Кроме того, я не уверен, почему вы хотите выбросить исключение после того, как оно было обработано - вы можете объяснить причину этого?
@ Али А - Очень верный момент, поэтому позвольте мне перефразировать - зачем выбрасывать исключение, а не завершать его обработку прямо здесь?
EDIT:
Вместо того, чтобы бросить, почему бы не сделать это?
try
{
DoSth();
}
catch(Exception ex)
{
Util.HandleException(ex);
}
Util.HandleException:
public static void HandleException(ex)
{
Util.Log(ex); // Util.Log should log the message and stack trace of the passed exception as well as any InnerExceptions - remember, than can be several nested InnerExceptions.
// Any additional handling logic, such as exiting the application, or showing the user an error message (or redirecting in a web app)
}
Таким образом, вы знаете, что каждое исключение регистрируется только один раз, и вы не выбрасываете его обратно в дикую природу, чтобы нанести дополнительный хаос.