gpt4 book ai didi

Java : logging execution history as XML

转载 作者:行者123 更新时间:2023-12-01 16:41:43 25 4
gpt4 key购买 nike

出于调试目的,我需要跟踪类中某段代码的执行情况。我想为所有方法调用生成 XML 格式的日志,例如:

<call class='pack.age.MyClass' method='myMethod1'>
<param name='param1'>param1.toString() value</param>
...
<call>Call to other method within myMethod1; you get the idea</call>
</call>

因为该类很长并且有很多方法,我想知道是否有一种方法可以通用地访问参数,也许使用反射。我在方法内部,我想循环调用该方法的参数。它会减轻我的痛苦,并允许我创建一个正则表达式来添加日志行。这可能吗?

任何其他巧妙的方法都可以实现这一点(但 AOP 可惜不是一个真正的选择)。

最佳答案

另一种方法是使用像 BTrace 这样的动态跟踪器(类似于 AOP,但在代码之外)。看BTrace's wiki举些例子。甚至还有 VisualVM 插件可以附加到正在运行的进程,使事情变得更容易。使用以下 BTrace 代码,您可以获得方法调用及其参数(取自示例)。

import com.sun.btrace.AnyType;
import com.sun.btrace.annotations.*;
import static com.sun.btrace.BTraceUtils.*;


@BTrace public class YourCalls {
@OnMethod(clazz="pack.age.MyClass", method="myMethod1",
location=@Location(value=Kind.CALL, clazz="/.*/", method="/.*/"))
public static void o(AnyType[] args) { // all calls to methods
printArray(args);
}
}

将 BTrace 附加到正在运行的程序很容易。首先使用 jps 获取进程的 PID,在此调用之后:

btrace PID YourCalls.java

关于Java : logging execution history as XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1458678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com