如何从Java代码输出到Jenkins控制台?

时间:2014-06-05 14:43:41

标签: java logging ant jenkins console

我添加了许多System.out.println()的java代码。其中一个是“主要”方法的开始。当我在NetBeans中启动代码时,我看到控制台输出包含所有这些println

当我在Jenkins / ant中使用fork& spawn设置为true(作为单独的任务)启动类时,它会运行,但是没有将println放到Jenkins控制台中。

我可以让System.out.println写入Jenkins控制台吗?

我找到了一个有趣的repaired Jenkins issue,他们说“对象模型的变量'out'可用于将消息写入构建控制台”How?

编辑: 在同一个项目中,未生成的应用程序将stdout输出到Jenkins控制台中。

编辑2。 请注意,我想输出到Jenkins控制台,而不是文件。

3 个答案:

答案 0 :(得分:2)

如果覆盖方法执行,则使用BuildListener实例获取logger实例并使用print方法写入。 喜欢这个

@Override
public boolean perform(AbstractBuild build, Launcher launcher, BuildListener listener) {

    // This is where you 'build' the project.       /
    // This also shows how you can consult the global configuration of the builder
    listener.getLogger().println("Inside the Perform Method");
    return true;
}

答案 1 :(得分:0)

Jenkins的

TaskListener有一个方法getLogger(),可以使用它在控制台输出中打印。不会将System.out.println重定向到Jenkins中的控制台输出。

答案 2 :(得分:0)

如果要将输出从进程重定向到Jenkins控制台,例如因为您调用了一些写入System.out的库代码,所以可以使用System.setOut / System.setErr重定向任何调用的输出。

@Override
public void perform(Run<?, ?> run, FilePath workspace, Launcher launcher, TaskListener listener)
     PrintStream outOriginal = System.out;
     PrintStream errOriginal = System.err;
     try {
        System.setOut(listener.getLogger());
        System.setErr(listener.getLogger());
        System.out.println("Testing System.out");
        // Call your code that writes to System.out by default
     } finally {
        System.setOut(outOriginal);
        System.setErr(errOriginal);
     }
}