为了记录方法调用的输出,我经常发现自己正在做这样的事情:
def someMethod() {
def retVal = //stuff
log.debug("The return value is: $retVal")
retVal
}
这似乎很多仪式只是记录方法的返回值。我知道我可以使用面向方面编程(AOP)来做这类事情,但我希望只用Groovy来做。
Groovy有一个很棒的@Memoize
注释来自动记忆方法调用,所以它有一个类似的@LogReturn
注释来做我以后做的事情吗?
理想情况下,我会期待一些干净的东西,比如:
@LogReturn("debug")
def someMethod() {
// Stuff
}
注1:我知道我可以使用元编程将方法包装在另一个方法中,但我希望能够通过注释使其更明确
注2:我也愿意接受以不同方式完成此事的建议
答案 0 :(得分:2)
我不知道在groovy核心中是否存在任何会记录返回值的注释。话虽如此,我认为应该可以进行一些AST转换。如果您遵循this文档,它确实有些类似,即日志条目和存在于带注释的方法但不打印返回值。
这个blog显示了如何捕获返回的缓存值,您可以使用它来进行日志记录。我怀疑你需要小心,因为这假设最后一个语句是一个返回值,所以如果你在最后一个语句之前显式返回,这可能不起作用。这只是我的猜测,我自己没有尝试过。
答案 1 :(得分:-2)
您可以使用groovy的日志注释。
@groovy.util.logging.Log
class Person {
def method() {
...
log.fine(runLongDatabaseQuery())
}
}
new Person().method()
@Log
注释系列都带有一个可选参数:日志变量的名称。默认情况下,日志变量称为“日志”,但您可以将其更改为您想要的任何内容。
技巧:您可以注入@groovy.util.logging.Slf4j
并将其作为静态最终org.slf4j.Logger用于您的类,并使用@Slf4j
初始化它(因为groovy 1.8)。用于与logback框架集成。