logging - 有没有一种干净的方法来记录 Groovy 中方法的结果?

标签 logging groovy annotations return-value

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

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/

相关文章:

file - 具有相同上次修改日期的常规副本文件

java - 给定一个命令 - 使用正则表达式调用 java/groovy 中的方法

java - 一个元素上有多个相同类型的注释?

python - 为什么 Python 记录器不在 logging.INFO 级别显示信息或调试消息?

java - Dropwizard 0.9.1 : Use Application Configuration Values in Custom AppenderFactory Implementation

java - log4j 无法在线程中打印 MDC 键值对

java - 基于 Java/Groovy 时区的日期时间转换

python - 如何更改 Tornado 的日志格式

java - 可以阻止将属性转换为 xml 字符串的 xml 注释

java - Hibernate:父实体上的过滤器是否隐式过滤子实体?