I am using groovy to run dynamic scripts from my Java application. I use JSR223 for this. I am overriding "out" property to redirect script stdout to my own consumer. However, I've noticed that printf inside closures does not respect that property (it always prints to stdout) while println perfectly complies (and prints to whatever specified).
I beleive this is because of the differences in printf and println in DefaultGroovyMethods.java: in https://github.com/apache/groovy/blob/master/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java#L849
println uses closure owner while printf does simple System.out.