问题描述
我需要使用日志记录功能扩展我的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提供的信息可能会对您有所帮助。