Часть первая
Как правило, вы не хотите, чтобы в блоке перехвата возникало поведение, генерирующее исключения.
try
{
ExceptionThrowingMethod();
}
Catch(Exception ex)
{
//Log It
//Try Again
ExceptionThrowingMethod();
}
Понятно, что второе исключение будет необработанным, и вы, как правило, не хотите, чтобы try-catch ловили вложенный в блоке catch .
Обычно ваш блок улова должен
- Записать ошибку. Всегда. Даже если вы установили его на самый низкий уровень ведения журнала и никогда не читаете эти журналы.
- Определите, можно ли восстановить ваше текущее состояние. (Правильные переменные установлены или равны нулю? Они ломались во время критической функции или между ними?)
- Если вы можете восстановить, установите некоторые переменные, которые обозначают «повторную попытку», и разрешите выполнению выполнять OUT из блока catch. Если вы не можете восстановить, попробуйте добавить контекст, а затем повторно выдать ошибку.
Блоки Catch предназначены для восстановления после ошибок, а не для обычного выполнения. Таким образом, даже с помощью FileNotFound это исключительное явление, когда пользователю предлагается попытаться найти свой файл , а не , и поэтому это должно произойти в его собственном try-catch (или в обратном цикле к исходному).
Часть вторая
Как правило, я бы предпочел записывать журналы в их собственный каталог, потому что таким образом я точно знаю, где они находятся, и я также знаю, что все в журнале имеет значение. Если ваше приложение является критически важным приложением (т. Е. Сервисом, который должен работать для работы фреймворка), то вы можете рассмотреть возможность входа в программу просмотра событий. Там также каждый выигрывает метод входа в оба. Вы можете иметь полные журналы в программном каталоге и записывать любые критические ошибки в программу просмотра событий.
Не зная, по какой причине вам дали войти в программу просмотра событий, я не могу сказать, является ли это хорошим советом.