Le funzioni funzione2, funzione3 e funzione4 dovranno sollevare un'eccezione (con throw) se qualcosa va storto; a mio avviso, tra l'altro, non devono essere loro a scrivere nel file di log, ma piuttosto il codice contenuto nel blocco catch.