groovy jenkins脚本中未显示日志消息

问题描述

我需要使用日志记录功能扩展我的jenkins脚本,并为此目的尝试使用java.util.logging。以下代码片段显示了我已经做过的事情。

import java.util.logging.*

@Noncps
def tryLogging() {
        println("Start")
        Logger logger = Logger.getLogger("Test")
        logger.setLevel(Level.INFO);
        logger.setUseParentHandlers(false);
        ConsoleHandler handler = new java.util.logging.ConsoleHandler()
        handler.setFormatter(new SimpleFormatter())
        logger.addHandler(handler)      
        logger.info("Hello")
        logger.severe("Severe")
        println("End")
}

tryLogging()

我的控制台日志现在显示以下内容

[Pipeline] Start of Pipeline
[Pipeline] echo
Start
[Pipeline] echo
End

实际上没有可见的日志消息,我也不知道我在做什么错。这里有人可以向我解释如何使控制台日志可见吗?我也不确定是否必须在这里使用此@Noncps

[管道]管道末端 完成:成功

解决方法

ConsoleHandler打印到System.err。修改脚本以使用

System.err.println("Start"),然后查看控制台中是否仍显示“开始”。如果没有,那么问题就出在ConsoleHandler is writing to a stream you can't see上。

要更改的另一件事是,您需要ensure your named logger can't be garbage collected。根据所使用的Java版本,记录器可能会被垃圾回收,并且可能会丢失附加的处理程序。

我也不确定是否必须在这里使用此@NonCPS吗?

What is @NonCPS annotation in Jenkins pipeline script提供的信息可能会对您有所帮助。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...