Try / Наконец - это способ правильно освободить ресурсы. Код в блоке finally НИКОГДА не должен выдаваться, поскольку он должен воздействовать только на ресурсы или состояние, которые были получены до входа в блок try.
Кроме того, я думаю, что log4J является почти анти-паттерном.
ЕСЛИ ВЫ ХОТИТЕ ПРОВЕРИТЬ РАБОЧУЮ ПРОГРАММУ, ИСПОЛЬЗУЙТЕ ПРАВИЛЬНЫЙ ИНСПЕКЦИОННЫЙ ИНСТРУМЕНТ (т. Е. Отладчик, IDE или, в крайнем смысле, ткачику байт-кода, но НЕ ЗАДАВАЙТЕ ЗАЯВЛЕНИЯ О РЕГИСТРАЦИИ В КАЖДОЙ НЕСКОЛЬКО ЛИНИЙ!)
В двух приведенных вами примерах первый выглядит правильно. Второй включает код логгера и содержит ошибку. Во втором примере вы подавляете исключение, если выдается одно из первых двух утверждений (т.е. вы перехватываете его и регистрируете, но не перебрасываете. Это то, что я нахожу очень распространенным в использовании log4j, и это реальная проблема разработки приложения. По сути, с вашим изменением вы заставляете программу терпеть неудачу так, что системе будет очень трудно ее обработать, так как вы в основном идете вперед, как будто у вас никогда не было исключений (вроде VB basic на error возобновить следующую конструкцию).