我正在寻找一种方法来自动化我经常执行的艰巨机械程序:在方法上实施跟踪记录。
考虑以下虚构方法。
private void createBaz(String key, String databaseConfigKey, String query) {
this.queries.put(key, query);
this.databases.put(key, Database.forKey(databaseConfigKey));
}
private void createFrob(String key, String hostname) {
this.frobs.put(key, query);
}
现在,我将添加一些有用的日志记录。
private void createBaz(String key, String databaseConfigKey, String query) {
this.log.trace("createBaz(" + key + ", " + databaseConfigKey + ", " + query + ")");
this.queries.put(key, query);
this.databases.put(key, Database.forKey(databaseConfigKey));
}
private void createFrob(String key, String hostname) {
this.log.trace("createFrob(" + key + ", " + hostname + ")");
this.frobs.put(key, query);
}
请注意两个log.trace调用的相似之处。
我输入了很多这样的日志行,我已经厌倦了。我正在寻找这样的东西:
private void createBaz(String key, String databaseConfigKey, String query) {
doLogTrace();
this.queries.put(key, query);
this.databases.put(key, Database.forKey(databaseConfigKey));
}
private void createFrob(String key, String hostname) {
doLogTrace();
this.frobs.put(key, query);
}
我可能需要帮助改进我的问题!
如果doLogTrace();
恰好是doLogTrace(this,System.foo(),#$^#$&^$#);
之类的较长字符串,对我来说无关紧要。它甚至可以是多行,只要它是我使用它的SAME字符串。然后我可以把那个字符串放在键盘宏中。
我考虑过的事情
log.trace("<methodName>(" + <method1> + ["," + <methodN>] +")");
......但是,通常是我的。 java文件只在Eclipse中打开...:/ 答案 0 :(得分:0)
答案 1 :(得分:0)
在这篇文章中,您可以看到如何获取当前正在执行的方法的名称。 Getting the name of the current executing method
有了这个,你也得到了你的每个方法参数,所以创建一个新的方法来接受其余的参数(int ...将允许你输入任意数量的int,你可以使用Object)
例如:
private void logTrace(Object ... args) {
String methodName = stacktrace.methodName;
String logmsg = methodName + "(";
foreach(arg : args){
logmsg+= arg + ", ";
}
logmsg+= ")";
log(logmsg);
}
答案 2 :(得分:0)
您可以使用Java Proxy class为每个方法添加一些前/后代码。好处是您可以避免修改原始代码。
如果您正在寻找更快速和肮脏的解决方案,您可以使用Thread.currentThread()。getStackTrace()并只显示一个相关的框架(它不会获得参数值)