是否有一种干净的方法来记录Groovy中方法的结果?

cde*_*zaq 5 groovy logging annotations return-value

为了记录方法调用的输出,我经常发现自己正在做这样的事情:

def someMethod() {
    def retVal = //stuff

    log.debug("The return value is: $retVal")
    retVal
}
Run Code Online (Sandbox Code Playgroud)

这似乎很多仪式只是记录方法的返回值.我知道我可以使用面向方面编程(AOP)来做这类事情,但我希望只用Groovy来做.

Groovy有很好的@Memoize注释来自动记忆方法调用,所以它有类似@LogReturn的注释来做我想要的事情吗?

理想情况下,我会期待一些干净的东西,像这样:

@LogReturn("debug")
def someMethod() {
    // Stuff
}
Run Code Online (Sandbox Code Playgroud)

注1:我知道我可以使用元编程将方法包装在另一个方法中,但我希望能够通过注释使其更明确

注2:我也愿意以不同的方式完成这项工作

kda*_*bir 2

我不知道 groovy 核心中是否存在记录返回值的任何此类注释。话虽如此,我认为通过一些 AST 转换应该是可能的。如果您遵循文档,它会执行一些类似的操作,即记录带注释的方法的条目和存在,但不打印返回值。

博客展示了如何捕获返回值进行缓存,您可以将其用于日志记录。我怀疑您需要小心,因为这假设最后一个语句是返回值,因此如果您在最后一个语句之前显式返回,这可能不起作用。这只是我的猜测,我自己没有尝试过。