Краткий ответ: Вы не можете (насколько я знаю, это так) .
Исключения, которые обычно вылавливаются, обычно перехватываются по причине ; они обрабатываются (или: они должны быть) в операторе catch (т.е. обработчик исключений). Это необученные исключения, которые вы хотите регистрировать.
Исключения никогда не должны использоваться для выполнения программы, но это происходит в любом случае, а иногда и по уважительной причине:
if (fileExists('foo.txt')) {
fileDelete('foo.txt'); // May result in a race-condition
}
Vs:
try {
fileDelete('foo.txt')
catch (IOException) {
// NO-OP
}
Еще один распространенный паттерн:
while (true) {
try {
item = queue.Receive(10); // Wait max. 10 seconds
process(item); // Process item
} catch (TimeOutException) {
// Nothing on queue, handle other stuff and then continue waiting...
DoStuff();
}
}
Выше паттерны довольно распространены. Опять же: исключения не должны использоваться для выполнения программы, и приведенный выше пример очереди, конечно, не должен существовать, но реальность такова, что это происходит. Реальные приложения, библиотеки, API и т. Д. c. иногда просто работаю таким образом, и как только вы имеете дело с сторонними приложениями, библиотеками или API, у вас возникают проблемы, потому что вы не всегда можете изменить все на то, что вы бы хотели это будет.
Можете ли вы представить свой лог-файл в приведенном выше примере очереди с вашим 'обобщенным c приложением logger catch для приложения' для приложения, работающего 24/7?
Когда протоколировать исключение (и, возможно, столь же важно: что регистрировать) следует рассматривать в каждом конкретном случае.