5

我一直在与一家公司合作,在当前的项目中,该公司必须实施一项在代码中编写大量跟踪日志记录 (JAVA) 的政策,该政策已经完成了一段时间。

我试图避免更改每一个方法,只是为了在所有方法上编写 logger.log('desired values') 之类的代码行。这太适得其反了。

是否有一种通用的方法来记录方法名称、它接收的参数,而无需更改大部分代码?我一直在研究注释和类似的东西,但是有很多不同参数的方法,所以我一直没能想出一个好的解决方案。

编辑1:该项目正在eclipse上开发。我正在使用 Liferay 和 JBoss 在门户中进行一些更改。

编辑 2:我遵循了这里给我的解决方案并使用了拦截器。我必须对现有方法做的唯一更改是向它们添加注释,这是完全可以接受的。在此链接中搜索更多信息:http: //docs.oracle.com/javaee/6/tutorial/doc/gkeed.html

4

4 回答 4

6

最好的方法是使用 AOP 和 Java 注释。我建议使用jcabi-aspects@Loggable的注释和 AspectJ方面(我是开发人员):

@Loggable(Loggable.DEBUG)
public String load(URL url) {
  return url.openConnection().getContent();
}
于 2013-02-03T08:14:01.190 回答
3

转到 Window->Preferences,选择 Java->Editor->Templates,使用 Pattern 即创建一个名为“logmeth”的新模板:

if(logger.isDebug())logger.debug("${exception_variable_name} ${return_type} "+getClass().getName()+"${enclosing_method}(${enclosing_method_arguments})"+String.format("***",${enclosing_method_arguments}));

并按 OK。

在 java Editor 中编写logmeth并按Strg++并且Eclipse 将编写 ie:spacespaceEnter

if(logger.isDebug())logger.debug("e boolean hasFuture(man, woman)"
            + String.format("***", man, woman));

Eclipse 太酷了。

于 2012-10-30T10:44:18.753 回答
2

您可以使用拦截器http://docs.oracle.com/javaee/6/tutorial/doc/gkeed.html来拦截对公共方法的调用,而无需更改任何代码,但不可能将此技术用于非公共方法。

于 2012-10-30T10:24:40.167 回答
1

你应该看看AOP。它使您能够在运行时注入代码,从而在每个方法之前/之后添加日志记录。

于 2012-10-30T10:16:50.827 回答