How to Display text during exec execution and tee to log file for later parsing?


(Peter Kahn) #1

How can I setup an exec task to “tee” to a file? I want to exec a maven build step and then parse the log. I’d like to use a tee to file approach so the build system shows constant updates and then I can parse to produce a nicer summary that I’d normally get from maven.

Would I add another logger to do this?

def configureExec = { task, executable, workingDir, cmdLine ->
    task.executable executable
    task.workingDir workingDir
    task.args cmdLine.split().toList()
}
  task mavenbuild(type:Exec) { task -> configureExec(
  task,
   getMvnCommand(),
   file("${getBuildRootPath()}"),
  "--batch-mode -U -Pdist -DskipTests -Dskipinstaller=true
clean install")
}

Thanks

Peter


(Peter Niederwieser) #2

As can be seen in the Gradle Build Language Reference, there is a Exec.standardOutput property that can be set to any ‘OutputStream’. Gradle doesn’t provide a ‘TeeOutputStream’, but you can, for example, use ‘org.apache.tools.ant.util.TeeOutputStream’, which is available on the build script class path.


(Peter Kahn) #3

Thanks Peter. We just implemented this and it works well


(Peter Kahn) #4

We followed Peter Niederwieser’s suggestion and used the TeeOutput shown below:

project.ext.logFile = new File(logFileName)
  project.ext.logFileStream = new FileOutputStream(project.ext.logFile)
  project.ext.teeStream = new org.apache.tools.ant.util.TeeOutputStream(task.standardOutput, project.ext.logFileStream)
    logging.captureStandardOutput LogLevel.INFO
      task.doFirst {
        println 'A task message which is logged at INFO level'
        }
        task.standardOutput project.ext.teeStream
    ...