Одним из вариантов будет использование каркаса ведения журнала (независимо от того, пишете ли вы это самостоятельно или используете существующее решение), поэтому вы можете сделать:
try{}
catch(Exception e) {Logger.logExceptionToDatabase(e); }
В этом вы можете обработать загрузку в вашу базу данных. Однако я не думаю, что очень полезно загружать журналы ошибок в вашу базу данных каждый раз, когда выполняется блок catch
. Я хотел бы написать их для разделения текстовых журналов и сбора их и только сохранять их в базе данных время от времени или по запросу пользователя.
К самому вопросу: это невозможно, однако есть блок finally
, который выполняется после соответствующего блока try
(до тех пор, пока JVM не завершается в блоке try). Может быть, вы могли бы ввести TransactionResult
и сделать запись для каждого успеха и неудачи, а затем сделать:
TransactionResult transactionResult;
try{
//do work and at the last line in the try after each operation that could
have failed has been executed set your transactionResult variable
transactionResult = new SuccessTransaction();
}
catch(Excpetion e) { transactionResult= new FailureTransaction();}
finally {Logger.logTransaction(transactionResult); }
и соответствующие классы:
public interface TransactionResult{
public void writeLog();
}
и пример результата транзакции:
public class SuccessTransaction implements TransactionResult{
private String resultStatus;
public SuccessTransaction() { this.resultStatus = "success"; }
public void writeLog() { System.out.println(this.resultStatus); } //or whatever you want to do with your result
}
То же самое относится к вашему экземпляру сбоя.
Обновление
Поскольку вы заявили, что существует множество исключений, вы также можете передать свое исключение в конкретный FailureTransaction
, а затем просто записать это сообщение или собрать все ошибки в списке, а затем проследить, какие исключения были вызваны.