我经常发现自己做这样的事情是为了记录方法调用的输出:
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:我也愿意接受以不同方式完成此任务的建议
最佳答案
我不知道 groovy 核心中是否存在任何此类记录返回值的注释。话虽如此,我认为通过一些 AST 转换应该是可能的。如果您关注 this文档,它有点类似,即记录条目并存在于带注释的方法,但不打印返回值。
此 blog显示了如何捕获返回值以进行缓存,您可以将其用于日志记录。我怀疑你需要小心,因为这假设最后一条语句是一个返回值,所以如果你在最后一条语句之前明确返回,这可能不起作用。这只是我的猜测,我自己没有尝试过。
关于logging - 有没有一种干净的方法来记录 Groovy 中方法的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23174017/