在groovy中使用前缀println语句

时间:2014-08-21 22:13:10

标签: groovy

我想使用groovy实现以下目标:

  1. 使用当前时间
  2. 在groovy中添加(前缀)所有println语句
  3. 我希望继续打印那些println语句以在标准输出上打印(在我的情况下是控制台)。
  4. 我想在一个通用位置执行此操作,因此我不必单独修改所有这些println语句。
  5. 是否有任何东西(比如groovy方面,log4j控制台appender等),我可以使用所有println语句预先设置时间?

1 个答案:

答案 0 :(得分:3)

元编程。您可以让PrintStream.metaClass.invokeMethod拦截对println方法的调用,并将日期添加到传入的字符串中。

像这样的东西,改编自Subramaniam" Programming Groovy"中的示例代码:

System.out.metaClass.invokeMethod = {String name, args ->
    def validMethod = System.out.metaClass.getMetaMethod(name, args)
    if (! validMethod)
    {
        return System.out.metaClass.invokeMissingMethod(delegate,name,args)
    }

    if ( validMethod.name == 'println')
    {
       args[0] = "${(new Date()).toString()} : ${args[0]}".toString()
    }
    validMethod.invoke(delegate,args)
}