从Gradle调用Ant任务时,如何拦截或提升日志消息

时间:2012-07-10 12:42:04

标签: ant gradle

我从gradle脚本调用ant.signjar。 如何捕获其输出? 我既没有轻易地管理它以将输出从INFO提升到另一个级别,也没有拦截或包装输出到错误警告到WARN级别。 现在,signjar回应证书即将到期,但这并没有在WARN级别上显示,这不是很好。

2 个答案:

答案 0 :(得分:2)

我假设Ant任务正在使用Ant的日志框架,而不仅仅是打印到标准输出。在那种情况下,您是否尝试过以下操作?

task taskThatCallsAntTask {
    logging.level = LogLevel.INFO
}

以这种方式配置时,无论在调用Gradle时设置了哪个日志级别,在执行任务时(以及之后还原)日志级别都将更改为INFO。请注意,您无法提升Ant日志事件的日志级别;这取决于它记录的级别的Ant任务。

答案 1 :(得分:0)

这是一个通过在调用期间注册自定义BuildListener来捕获Ant任务输出的方法。

def captureAntOutput(ant, Closure command) {
    def buffer = new ByteArrayOutputStream()
    def captureStream = new PrintStream(buffer, true, "UTF-8")
    def listener = new org.apache.tools.ant.DefaultLogger(
            errorPrintStream: captureStream,
            outputPrintStream: captureStream,
            messageOutputLevel: org.apache.tools.ant.Project.MSG_INFO
    )

    ant.project.addBuildListener(listener)
    project.configure(ant, command)
    ant.project.removeBuildListener(listener)

    return buffer.toString("UTF-8");
}

使用示例:

String result = captureAntOutput(ant) {
    echo(message: "hello")
}
assert result.contains("hello")