As per #9, create a simple method/function tracing aspect that logs method invocations inc. params, and method results, either a successful return with the associated return value, or a throw with the associated exception.
Instead of logging these things directly to the console, the aspect could be configurable. It could accept a simple "receiver" API that it notifies for call, return, and throw. By default it could use a built-in receiver that simply logs to the console.
As per #9, create a simple method/function tracing aspect that logs method invocations inc. params, and method results, either a successful return with the associated return value, or a throw with the associated exception.
Instead of logging these things directly to the console, the aspect could be configurable. It could accept a simple "receiver" API that it notifies for call, return, and throw. By default it could use a built-in receiver that simply logs to the console.