【发布时间】:2020-12-03 14:25:04
【问题描述】:
我正在尝试创建一个将采用一系列方法的日志记录系统。我正在拦截的一些方法有 0 个参数,其他的有很多。我的问题是:我可以创建一个通用的@Advice.OnMethodEnter,它可以使用@Advice.AllArguments 和ByteBuddy 来捕获参数吗?
方法如下:
@Advice.OnMethodEnter
public static void intercept(@Port int port,
@Host String host,
@Advice.Origin("#t:#m") String signature,
@Advice.AllArguments Object[] arguments)
{
AgentHelper.log(host, port, signature, Arrays.toString(arguments));
}
当注解@Advice.AllArguments 丢失时一切正常,但我一放上来,所有没有参数的方法都被忽略了。
我还尝试查看是否存在使用以下命令引发的显式错误:
new AgentBuilder.Default()
...
.with(AgentBuilder.Listener.StreamWriting.toSystemOut().withErrorsOnly())
.with(AgentBuilder.InstallationListener.StreamWriting.toSystemOut())
...
但这并没有显示任何错误。我是否必须逐个创建拦截器,还是有办法以我不理解的方式获取此行为?
【问题讨论】:
标签: java byte-buddy javaagents