Java, cómo rastrear funciones llamadas

Quiero rastrear el comienzo [y el final] de las funciones llamadas en Java, como el siguiente código:

    public void foo() {
  System.out.println("begin of foo()");
  ...
  System.out.println("e-n-d of foo()");
 }

Pero el mantenimiento del código de volcadoSystem.out.println es algo tedioso y propenso a errores, ya que puede haber decenas de miles de funciones en una clase.

¿Alguna buena idea puede facilitar este trabajo? No quiero volcar las declaraciones en todo el archivo.

La implementación de ambos o uno de los rastreos iniciales y finales es perferida.
Pero, si es imposible, las grabaciones de que la función ha sido llamada también es útil. Quiero decir que no me importa el comienzo y el final exactos, solo digo que se ha llamado a la función.

Respuestas a la pregunta(4)

Su respuesta a la pregunta