Реализация задания Proxy с помощью библиотеки asm.
Нужно по максимуму сократить использование reflection в runtime. Например, если в сигнатуре используется Object, то логировать его надо с помощью toString, а не пытаться во время выполнения выяснить его тип.
По возможности надо переиспользовать код из Proxy.