В основном вам нужно аспектно-ориентированное программирование некоторой формы, где аспект может определить, должен ли текущий поток регистрировать вызовы. (Альтернатива состоит в том, чтобы явно включить ведение журнала в каждый метод самостоятельно, что было бы больно.)
В Java существует множество платформ AOP, таких как AspectJ и Spring (Spring, конечно, намного больше, чем AOP).
Применение аспектов к каждому вызову метода в системе может быть сложным, хотя ... У меня нет опыта работы с AspectJ, но Spring AOP в основном предназначен для включения AOP вокруг компонентов. Классы, которые фактически неизвестны Spring, не могут быть легко изменены. Имейте в виду, с тех пор, как я использовал даже Spring AOP, с тех пор все могло произойти:)